반응형
1. 객체지향 프로그래밍(OOP) 개요 (이전 시리즈 요약)
이전 글에서는 캡슐화와 추상화 개념을 학습하였으며, 핵심 내용은 다음과 같습니다:
- 캡슐화(Encapsulation): 데이터를 보호하기 위해 private 변수와 getter/setter 활용
- 추상화(Abstraction): 인터페이스를 표준화하고, 세부 구현을 감추는 개념
- 추상 클래스(Abstract Class): 공통된 인터페이스를 제공하고 하위 클래스에서 구현하도록 강제
이번 글에서는 OOP 개념을 적용하여 실제 프로그램을 개발하는 방법을 배워보겠습니다. 간단한 도서 관리 시스템을 만들어 실전 경험을 쌓아봅시다!
2. 도서 관리 시스템 개요
이 프로그램에서는 다음 기능을 구현합니다:
- 도서 추가
- 도서 삭제
- 도서 목록 출력
- 도서 검색
- 파일을 통한 데이터 저장 및 불러오기
✅ 주요 사용 사례 (Use Cases)
- 사용자가 새로운 도서를 추가하면, 시스템은 도서를 목록에 저장합니다.
- 사용자가 특정 ISBN을 가진 도서를 삭제하면, 해당 도서는 목록에서 제거됩니다.
- 사용자가 도서 목록을 요청하면, 현재 등록된 모든 도서가 출력됩니다.
- 사용자가 특정 키워드로 도서를 검색하면, 해당 키워드가 포함된 모든 도서를 반환합니다.
- 사용자가 프로그램을 종료하면서 저장을 선택하면, 현재 도서 목록이 파일에 저장됩니다.
- 프로그램 시작 시 자동으로 저장된 도서 목록을 불러옴으로써 기존 데이터를 유지할 수 있습니다.
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 블로그 시리즈 요약
- 객체지향 프로그래밍 개념: OOP의 핵심 원칙(캡슐화, 상속, 다형성, 추상화)과 클래스/객체 개념
- 클래스와 객체 활용: 생성자, 소멸자, 인스턴스 변수와 클래스 변수, 메서드 종류
- 상속과 다형성: 부모 클래스로부터 기능을 물려받고 다양한 형태로 활용하는 방법
- 캡슐화와 추상화: 데이터 보호 및 인터페이스 설계 방법
- OOP 실전 프로젝트: OOP를 활용한 도서 관리 시스템 개발
이제 여러분도 OOP 개념을 활용하여 다양한 프로젝트를 만들어보세요! 🚀
🚀 앞으로도 더욱 흥미로운 OOP 프로젝트와 실용적인 예제를 통해 돌아오겠습니다! 기대해 주세요! 😊
혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서 - 프로그래밍 언어 | 쿠팡
현재 별점 4.8점, 리뷰 198개를 가진 혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서! 지금 쿠팡에서 더 저렴하고 다양한 프로그래밍 언어 제품들을 확인해보세요.
www.coupang.com
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
반응형
'파이썬 > [객체지향 시리즈!]' 카테고리의 다른 글
📌 4. 캡슐화와 추상화: 데이터 보호와 인터페이스 설계 (2) | 2025.02.06 |
---|---|
📌 3. 상속과 다형성: 코드 재사용성과 확장성 높이기 (0) | 2025.02.05 |
📌 2. 파이썬 클래스와 객체: 기본 개념과 활용 (0) | 2025.02.04 |
📌 1. 객체지향 프로그래밍이란? (개념과 기본 원칙) (0) | 2025.02.03 |
댓글