본문 바로가기
파이썬/[객체지향 시리즈!]

📌 5. OOP 실전 프로젝트: 간단한 도서 관리 시스템 개발

by 배불뚝 아저씨 2025. 2. 7.
반응형

1. 객체지향 프로그래밍(OOP) 개요 (이전 시리즈 요약)

이전 글에서는 캡슐화와 추상화 개념을 학습하였으며, 핵심 내용은 다음과 같습니다:

  • 캡슐화(Encapsulation): 데이터를 보호하기 위해 private 변수와 getter/setter 활용
  • 추상화(Abstraction): 인터페이스를 표준화하고, 세부 구현을 감추는 개념
  • 추상 클래스(Abstract Class): 공통된 인터페이스를 제공하고 하위 클래스에서 구현하도록 강제

이번 글에서는 OOP 개념을 적용하여 실제 프로그램을 개발하는 방법을 배워보겠습니다. 간단한 도서 관리 시스템을 만들어 실전 경험을 쌓아봅시다!


2. 도서 관리 시스템 개요

이 프로그램에서는 다음 기능을 구현합니다:

  1. 도서 추가
  2. 도서 삭제
  3. 도서 목록 출력
  4. 도서 검색
  5. 파일을 통한 데이터 저장 및 불러오기

✅ 주요 사용 사례 (Use Cases)

  1. 사용자가 새로운 도서를 추가하면, 시스템은 도서를 목록에 저장합니다.
  2. 사용자가 특정 ISBN을 가진 도서를 삭제하면, 해당 도서는 목록에서 제거됩니다.
  3. 사용자가 도서 목록을 요청하면, 현재 등록된 모든 도서가 출력됩니다.
  4. 사용자가 특정 키워드로 도서를 검색하면, 해당 키워드가 포함된 모든 도서를 반환합니다.
  5. 사용자가 프로그램을 종료하면서 저장을 선택하면, 현재 도서 목록이 파일에 저장됩니다.
  6. 프로그램 시작 시 자동으로 저장된 도서 목록을 불러옴으로써 기존 데이터를 유지할 수 있습니다.

3. 클래스 설계

🔹 Book 클래스: 개별 도서 정보 관리

class Book:
    """
    도서 정보를 저장하는 클래스
    """
    def __init__(self, title, author, isbn):
        self.title = title  # 도서 제목
        self.author = author  # 저자
        self.isbn = isbn  # ISBN (고유 식별 번호)
    
    def __str__(self):
        """
        도서 정보를 문자열로 반환
        """
        return f"제목: {self.title}, 저자: {self.author}, ISBN: {self.isbn}"

🔹 Library 클래스: 도서 목록 관리

import json

class Library:
    """
    도서 목록을 관리하는 클래스
    """
    def __init__(self):
        self.books = []  # 도서 목록을 저장하는 리스트
    
    def add_book(self, book):
        """
        새로운 도서를 추가하는 메서드
        """
        self.books.append(book)
        print(f"도서 '{book.title}'이(가) 추가되었습니다.")
    
    def remove_book(self, isbn):
        """
        특정 ISBN을 가진 도서를 삭제하는 메서드
        """
        for book in self.books:
            if book.isbn == isbn:
                self.books.remove(book)
                print(f"도서 '{book.title}'이(가) 삭제되었습니다.")
                return
        print("해당 ISBN의 도서를 찾을 수 없습니다.")
    
    def display_books(self):
        """
        현재 등록된 모든 도서를 출력하는 메서드
        """
        if not self.books:
            print("현재 등록된 도서가 없습니다.")
        else:
            for book in self.books:
                print(book)
    
    def search_book(self, keyword):
        """
        특정 키워드를 포함하는 도서를 검색하는 메서드
        """
        found_books = [book for book in self.books if keyword.lower() in book.title.lower() or keyword.lower() in book.author.lower()]
        if found_books:
            for book in found_books:
                print(book)
        else:
            print("검색 결과가 없습니다.")
    
    def save_to_file(self, filename="library.json"):
        """
        현재 도서 목록을 파일에 저장하는 메서드
        """
        with open(filename, "w", encoding="utf-8") as file:
            json.dump([book.__dict__ for book in self.books], file, ensure_ascii=False, indent=4)
        print("도서 목록이 저장되었습니다.")
    
    def load_from_file(self, filename="library.json"):
        """
        파일에서 저장된 도서 목록을 불러오는 메서드
        """
        try:
            with open(filename, "r", encoding="utf-8") as file:
                book_data = json.load(file)
                self.books = [Book(book["title"], book["author"], book["isbn"]) for book in book_data]
            print("도서 목록이 불러와졌습니다.")
        except FileNotFoundError:
            print("저장된 도서 목록이 없습니다.")

반응형

4. 실제 사용 예제

if __name__ == "__main__":
    library = Library()
    library.load_from_file()
    
    # 도서 추가
    book1 = Book("파이썬 프로그래밍", "홍길동", "1234567890")
    book2 = Book("객체지향 설계", "이순신", "0987654321")
    library.add_book(book1)
    library.add_book(book2)
    
    # 도서 목록 출력
    print("\n현재 도서 목록:")
    library.display_books()
    
    # 도서 검색
    print("\n'파이썬' 검색 결과:")
    library.search_book("파이썬")
    
    # 도서 삭제
    print("\n도서 삭제 진행:")
    library.remove_book("1234567890")
    
    # 변경된 목록 출력
    print("\n변경된 도서 목록:")
    library.display_books()
    
    # 저장 후 종료
    library.save_to_file()

🎯 마무리

이 글에서는 OOP 개념을 적용한 도서 관리 시스템을 구현해보았습니다.

  • 클래스를 활용하여 도서 정보를 관리
  • 파일 입출력을 활용하여 데이터를 저장 및 불러오기
  • 객체지향 원칙을 적용하여 유지보수성이 높은 코드 작성

 

🔥 OOP 블로그 시리즈 요약

  1. 객체지향 프로그래밍 개념: OOP의 핵심 원칙(캡슐화, 상속, 다형성, 추상화)과 클래스/객체 개념
  2. 클래스와 객체 활용: 생성자, 소멸자, 인스턴스 변수와 클래스 변수, 메서드 종류
  3. 상속과 다형성: 부모 클래스로부터 기능을 물려받고 다양한 형태로 활용하는 방법
  4. 캡슐화와 추상화: 데이터 보호 및 인터페이스 설계 방법
  5. OOP 실전 프로젝트: OOP를 활용한 도서 관리 시스템 개발

이제 여러분도 OOP 개념을 활용하여 다양한 프로젝트를 만들어보세요! 🚀

🚀 앞으로도 더욱 흥미로운 OOP 프로젝트와 실용적인 예제를 통해 돌아오겠습니다! 기대해 주세요! 😊

 

 

 

혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서 - 프로그래밍 언어 | 쿠팡

현재 별점 4.8점, 리뷰 198개를 가진 혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서! 지금 쿠팡에서 더 저렴하고 다양한 프로그래밍 언어 제품들을 확인해보세요.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형

댓글