🏛 클래스와 객체(Class & Object)
파이썬을 포함한 객체 지향 프로그래밍(OOP, Object-Oriented Programming)에서는 클래스(Class) 와 객체(Object) 개념이 핵심입니다.

📌 1. 클래스란?
클래스는 객체를 정의하는 틀(설계도) 입니다.
예를 들어, 자동차를 만들기 위한 설계도를 생각해 보면 됩니다.
🔹 클래스는 속성(변수)과 메서드(함수)로 구성됩니다.
🔹 클래스를 이용하면 동일한 구조를 가지는 객체를 쉽게 여러 개 생성할 수 있습니다.
class Car: # 자동차 클래스 선언
def __init__(self, brand, color): # 생성자 (초기화 메서드)
self.brand = brand # 속성 1
self.color = color # 속성 2
def drive(self): # 메서드 (동작)
print(f"{self.color} {self.brand}가 주행 중입니다.")
📌 2. 객체란?
객체는 클래스를 기반으로 생성된 실체(인스턴스) 입니다.
즉, 클래스가 설계도라면, 객체는 그 설계도를 기반으로 만든 실제 자동차라고 볼 수 있습니다.
car1 = Car("Hyundai", "Blue") # 객체 생성
car2 = Car("Tesla", "Red") # 객체 생성
print(car1.brand) # Hyundai
print(car2.color) # Red
car1.drive() # Blue Hyundai가 주행 중입니다.
car2.drive() # Red Tesla가 주행 중입니다.
🔹 Car 클래스는 자동차를 만들기 위한 틀이고,
🔹 car1, car2는 각각의 자동차 객체(인스턴스)입니다.
📌 3. 클래스와 객체의 관계
개념 설명 예시
클래스 | 객체를 생성하기 위한 틀(설계도) | Car 클래스 |
객체(인스턴스) | 클래스를 기반으로 생성된 실체 | car1, car2 |
속성(변수) | 객체의 데이터(특징) | brand, color |
메서드(함수) | 객체의 동작(행동) | drive() |
📌 4. 예제: 학생 클래스 만들기
학생을 나타내는 Student 클래스를 만들어봅시다.
class Student:
def __init__(self, name, age, grade):
self.name = name # 학생 이름
self.age = age # 학생 나이
self.grade = grade # 학년
def introduce(self):
print(f"안녕하세요! 저는 {self.age}살 {self.grade}학년 {self.name}입니다.")
# 객체 생성
student1 = Student("철수", 14, 8)
student2 = Student("영희", 15, 9)
# 메서드 호출
student1.introduce() # 안녕하세요! 저는 14살 8학년 철수입니다.
student2.introduce() # 안녕하세요! 저는 15살 9학년 영희입니다.
📌 5. 연습 문제
아래 요구 사항에 맞는 클래스를 작성해 보세요.
🔹 문제 1
다음 요구 사항을 만족하는 Book 클래스를 만드세요.
- 책의 제목(title), 저자(author), 가격(price)을 속성으로 가집니다.
- info() 메서드를 실행하면 "책 제목: OO, 저자: OO, 가격: OO원"이 출력됩니다.
🔹 문제 2
Book 클래스를 이용하여
- 제목이 "파이썬 기초", 저자가 "김철수", 가격이 15000원인 책을 생성하세요.
- info() 메서드를 실행하여 정보를 출력하세요.
🔥 도전 과제
🚀 도전 과제
Library 클래스를 만들어서 여러 권의 책을 관리하는 기능을 추가해 보세요.
- 책을 추가하는 add_book() 메서드
- 도서 목록을 출력하는 show_books() 메서드
📌 힌트: 책을 저장할 리스트(self.books = [])를 활용하세요! 🚀
📌 연습 문제 & 도전 과제 정답
✅ 연습 문제 1 & 2: Book 클래스 구현
📌 요구 사항
- title, author, price 속성을 가진다.
- info() 메서드를 실행하면 "책 제목: OO, 저자: OO, 가격: OO원"이 출력된다.
🎯 정답 코드
class Book:
def __init__(self, title, author, price):
self.title = title
self.author = author
self.price = price
def info(self):
print(f"책 제목: {self.title}, 저자: {self.author}, 가격: {self.price}원")
# 객체 생성
book1 = Book("파이썬 기초", "김철수", 15000)
# 메서드 실행
book1.info() # 책 제목: 파이썬 기초, 저자: 김철수, 가격: 15000원
🚀 도전 과제: Library 클래스 구현
📌 요구 사항
- 여러 권의 책을 관리하는 Library 클래스를 만든다.
- add_book() 메서드를 통해 책을 추가한다.
- show_books() 메서드를 통해 도서 목록을 출력한다.
🎯 정답 코드
class Library:
def __init__(self):
self.books = [] # 책 목록을 저장할 리스트
def add_book(self, book):
self.books.append(book)
print(f"'{book.title}' 책이 도서관에 추가되었습니다.")
def show_books(self):
if not self.books:
print("현재 도서관에 등록된 책이 없습니다.")
return
print("\n📚 도서관 목록 📚")
for idx, book in enumerate(self.books, start=1):
print(f"{idx}. {book.title} - {book.author} (가격: {book.price}원)")
# 객체 생성
library = Library()
# 책 추가
book1 = Book("파이썬 기초", "김철수", 15000)
book2 = Book("객체지향 프로그래밍", "이영희", 20000)
book3 = Book("데이터 분석", "박민수", 18000)
library.add_book(book1)
library.add_book(book2)
library.add_book(book3)
# 도서 목록 출력
library.show_books()
🏆 실행 결과
'파이썬 기초' 책이 도서관에 추가되었습니다.
'객체지향 프로그래밍' 책이 도서관에 추가되었습니다.
'데이터 분석' 책이 도서관에 추가되었습니다.
📚 도서관 목록 📚
1. 파이썬 기초 - 김철수 (가격: 15000원)
2. 객체지향 프로그래밍 - 이영희 (가격: 20000원)
3. 데이터 분석 - 박민수 (가격: 18000원)
🎯 추가 확장 아이디어
✔ search_book() 메서드를 추가하여 특정 책 검색 기능 구현
✔ remove_book() 메서드를 추가하여 책을 삭제하는 기능 추가
✔ 책 목록을 파일에 저장하는 기능 추가 (save_books() 메서드)
이제 여러분도 객체 지향 프로그래밍(OOP)을 활용하여 더 많은 기능을 추가해 보세요! 🚀🔥
📌 추가 확장 아이디어: Library 클래스 기능 추가
도서관 시스템을 더욱 발전시키기 위해 검색, 삭제, 파일 저장 기능을 추가할 수 있습니다.
✅ 1. search_book() - 책 검색 기능
🔹 사용자가 입력한 제목에 해당하는 책을 검색하는 기능
🔹 검색된 책이 있으면 정보를 출력, 없으면 "책을 찾을 수 없습니다." 출력
🎯 코드 추가
class Library:
def __init__(self):
self.books = [] # 책 목록을 저장할 리스트
def add_book(self, book):
self.books.append(book)
print(f"'{book.title}' 책이 도서관에 추가되었습니다.")
def show_books(self):
if not self.books:
print("현재 도서관에 등록된 책이 없습니다.")
return
print("\n📚 도서관 목록 📚")
for idx, book in enumerate(self.books, start=1):
print(f"{idx}. {book.title} - {book.author} (가격: {book.price}원)")
def search_book(self, title):
for book in self.books:
if book.title == title:
print(f"🔍 검색 결과: {book.title} - {book.author} (가격: {book.price}원)")
return
print(f"❌ '{title}' 책을 찾을 수 없습니다.")
# 객체 생성 및 테스트
library = Library()
library.add_book(Book("파이썬 기초", "김철수", 15000))
library.add_book(Book("데이터 분석", "박민수", 18000))
library.search_book("파이썬 기초") # 검색 성공
library.search_book("자바 기초") # 검색 실패
🏆 실행 결과
'파이썬 기초' 책이 도서관에 추가되었습니다.
'데이터 분석' 책이 도서관에 추가되었습니다.
🔍 검색 결과: 파이썬 기초 - 김철수 (가격: 15000원)
❌ '자바 기초' 책을 찾을 수 없습니다.
✅ 2. remove_book() - 책 삭제 기능
🔹 사용자가 특정 책을 입력하면 삭제
🔹 삭제 후, "책이 삭제되었습니다." 메시지 출력
🔹 목록에 없는 책을 삭제하려 하면 "책을 찾을 수 없습니다." 출력
🎯 코드 추가
def remove_book(self, title):
for book in self.books:
if book.title == title:
self.books.remove(book)
print(f"✅ '{title}' 책이 삭제되었습니다.")
return
print(f"❌ '{title}' 책을 찾을 수 없습니다.")
🔹 위 코드를 Library 클래스 안에 추가한 후, 실행하면 아래와 같이 동작합니다.
library.show_books()
library.remove_book("파이썬 기초")
library.show_books()
library.remove_book("자바 기초")
🏆 실행 결과
📚 도서관 목록 📚
1. 파이썬 기초 - 김철수 (가격: 15000원)
2. 데이터 분석 - 박민수 (가격: 18000원)
✅ '파이썬 기초' 책이 삭제되었습니다.
📚 도서관 목록 📚
1. 데이터 분석 - 박민수 (가격: 18000원)
❌ '자바 기초' 책을 찾을 수 없습니다.
✅ 3. save_books() - 책 목록을 파일로 저장
🔹 도서 목록을 books.txt 파일에 저장
🔹 파일 저장 형식: 책 제목, 저자, 가격
🔹 with open()을 사용하여 파일을 열고 저장
🎯 코드 추가
def save_books(self, filename="books.txt"):
with open(filename, "w", encoding="utf-8") as file:
for book in self.books:
file.write(f"{book.title},{book.author},{book.price}\n")
print(f"💾 도서 목록이 '{filename}' 파일에 저장되었습니다.")
✅ 파일 저장 테스트
library.add_book(Book("객체지향 프로그래밍", "이영희", 20000))
library.save_books() # books.txt 파일 생성됨
🏆 파일 내용 (books.txt)
데이터 분석,박민수,18000
객체지향 프로그래밍,이영희,20000
🎯 최종 코드 (Library 클래스)
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
print(f"'{book.title}' 책이 도서관에 추가되었습니다.")
def show_books(self):
if not self.books:
print("현재 도서관에 등록된 책이 없습니다.")
return
print("\n📚 도서관 목록 📚")
for idx, book in enumerate(self.books, start=1):
print(f"{idx}. {book.title} - {book.author} (가격: {book.price}원)")
def search_book(self, title):
for book in self.books:
if book.title == title:
print(f"🔍 검색 결과: {book.title} - {book.author} (가격: {book.price}원)")
return
print(f"❌ '{title}' 책을 찾을 수 없습니다.")
def remove_book(self, title):
for book in self.books:
if book.title == title:
self.books.remove(book)
print(f"✅ '{title}' 책이 삭제되었습니다.")
return
print(f"❌ '{title}' 책을 찾을 수 없습니다.")
def save_books(self, filename="books.txt"):
with open(filename, "w", encoding="utf-8") as file:
for book in self.books:
file.write(f"{book.title},{book.author},{book.price}\n")
print(f"💾 도서 목록이 '{filename}' 파일에 저장되었습니다.")
# 테스트
library = Library()
library.add_book(Book("파이썬 기초", "김철수", 15000))
library.add_book(Book("객체지향 프로그래밍", "이영희", 20000))
library.show_books()
library.search_book("객체지향 프로그래밍")
library.remove_book("파이썬 기초")
library.show_books()
library.save_books()
🎯 추가 발전 방향
✔ load_books() 기능 추가하여 파일에서 도서 목록 불러오기
✔ update_book() 기능 추가하여 책의 가격 수정 가능하게 하기
✔ GUI(그래픽 인터페이스)와 연결하여 도서관 시스템 구축
이제 더 발전된 기능을 추가해보세요! 🚀🔥
📌 추가 발전 방향: 도서관 시스템 확장 🚀
이제 Library 클래스에 더 다양한 기능을 추가하여 더욱 완벽한 도서관 관리 시스템을 만들어 보겠습니다.
✅ 1. load_books() - 파일에서 도서 목록 불러오기
🔹 기존에 저장된 books.txt 파일에서 도서를 불러와 목록에 추가
🔹 open() 함수로 파일을 읽어 self.books 리스트에 저장
🔹 파일이 없거나 오류 발생 시 "불러올 도서 목록이 없습니다." 출력
🎯 코드 추가
def load_books(self, filename="books.txt"):
try:
with open(filename, "r", encoding="utf-8") as file:
for line in file:
title, author, price = line.strip().split(",")
self.books.append(Book(title, author, int(price)))
print(f"📂 '{filename}'에서 도서 목록을 불러왔습니다.")
except FileNotFoundError:
print(f"❌ '{filename}' 파일이 없습니다. 새 도서 목록을 시작합니다.")
✅ 파일 불러오기 테스트
library = Library()
library.load_books() # books.txt 파일에서 불러오기
library.show_books() # 불러온 책 목록 출력
🏆 실행 결과 (books.txt 파일 존재 시)
📂 'books.txt'에서 도서 목록을 불러왔습니다.
📚 도서관 목록 📚
1. 데이터 분석 - 박민수 (가격: 18000원)
2. 객체지향 프로그래밍 - 이영희 (가격: 20000원)
✅ 2. update_book() - 책 정보 수정 기능
🔹 책의 가격을 변경하는 기능 추가
🔹 사용자가 입력한 책이 존재하면 가격을 업데이트하고 "책 정보가 업데이트되었습니다." 출력
🔹 존재하지 않는 경우 "책을 찾을 수 없습니다." 출력
🎯 코드 추가
def update_book(self, title, new_price):
for book in self.books:
if book.title == title:
book.price = new_price
print(f"🔄 '{title}'의 가격이 {new_price}원으로 변경되었습니다.")
return
print(f"❌ '{title}' 책을 찾을 수 없습니다.")
✅ 책 정보 수정 테스트
library.show_books()
library.update_book("객체지향 프로그래밍", 22000)
library.show_books()
🏆 실행 결과
📚 도서관 목록 📚
1. 데이터 분석 - 박민수 (가격: 18000원)
2. 객체지향 프로그래밍 - 이영희 (가격: 20000원)
🔄 '객체지향 프로그래밍'의 가격이 22000원으로 변경되었습니다.
📚 도서관 목록 📚
1. 데이터 분석 - 박민수 (가격: 18000원)
2. 객체지향 프로그래밍 - 이영희 (가격: 22000원)
✅ 3. GUI(그래픽 인터페이스) 연동
🔹 tkinter 또는 PyQt를 사용하여 GUI 기반 도서관 프로그램 제작
🔹 버튼 클릭으로 책 추가, 검색, 삭제, 수정, 저장 기능 실행 가능
🔹 Treeview를 이용하여 도서 목록을 테이블 형식으로 출력
🎯 간단한 tkinter GUI 코드
import tkinter as tk
from tkinter import messagebox
class LibraryGUI:
def __init__(self, master):
self.library = Library()
self.master = master
master.title("도서관 관리 시스템")
# 책 추가 버튼
self.add_button = tk.Button(master, text="책 추가", command=self.add_book)
self.add_button.pack()
# 책 목록 출력 버튼
self.show_button = tk.Button(master, text="도서 목록 보기", command=self.show_books)
self.show_button.pack()
def add_book(self):
self.library.add_book(Book("알고리즘", "최규빈", 25000))
messagebox.showinfo("성공", "책이 추가되었습니다!")
def show_books(self):
books_list = "\n".join([f"{book.title} - {book.author} ({book.price}원)" for book in self.library.books])
messagebox.showinfo("도서 목록", books_list if books_list else "도서 목록이 없습니다.")
root = tk.Tk()
gui = LibraryGUI(root)
root.mainloop()
🏆 기능
✔ 버튼 클릭으로 책 추가 가능
✔ 도서 목록을 팝업 창으로 확인 가능
✔ tkinter를 활용하여 GUI 형태로 프로그램 사용
✅ 4. search_books_by_author() - 저자별 책 검색
🔹 특정 저자의 책 목록을 검색하는 기능
🔹 해당 저자가 쓴 모든 책을 리스트 형태로 출력
🎯 코드 추가
def search_books_by_author(self, author):
result = [book for book in self.books if book.author == author]
if result:
print(f"\n📖 '{author}' 작가의 도서 목록:")
for book in result:
print(f"- {book.title} ({book.price}원)")
else:
print(f"❌ '{author}' 작가의 책을 찾을 수 없습니다.")
✅ 테스트
library.search_books_by_author("이영희")
🏆 실행 결과
📖 '이영희' 작가의 도서 목록:
- 객체지향 프로그래밍 (22000원)
✅ 5. export_books_to_csv() - CSV 파일로 내보내기
🔹 책 목록을 CSV 파일로 저장하여 엑셀에서 확인 가능
🔹 csv 모듈을 사용하여 데이터를 books.csv 파일로 저장
🎯 코드 추가
import csv
def export_books_to_csv(self, filename="books.csv"):
with open(filename, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["제목", "저자", "가격"])
for book in self.books:
writer.writerow([book.title, book.author, book.price])
print(f"📂 '{filename}' 파일로 도서 목록을 내보냈습니다.")
✅ 테스트
library.export_books_to_csv()
🏆 결과 (books.csv 파일)
제목,저자,가격
데이터 분석,박민수,18000
객체지향 프로그래밍,이영희,22000
🎯 최종 목표: 완벽한 도서관 관리 시스템 구축
✅ 기본 기능
- 책 추가 (add_book())
- 책 검색 (search_book())
- 책 삭제 (remove_book())
- 책 정보 수정 (update_book())
✅ 파일 입출력
- 도서 목록 저장 (save_books())
- 도서 목록 불러오기 (load_books())
- CSV 파일로 내보내기 (export_books_to_csv())
✅ 고급 기능
- 저자별 검색 (search_books_by_author())
- GUI 인터페이스 (tkinter)
🚀 이제 여러분이 해볼 것!
💡 추가 기능을 직접 구현해 보세요! ✔ 도서 대출 및 반납 시스템 추가
✔ 회원 관리 기능 추가 (회원 등록, 대출 기록 관리)
✔ 웹 애플리케이션 형태로 구현 (Flask 또는 Django 활용)
파이썬을 활용한 객체 지향 프로그래밍(OOP)을 연습하면서 도서관 시스템을 직접 업그레이드해 보세요! 🚀🔥
'십대를 위한 코딩 > 십대를 위한 파이썬' 카테고리의 다른 글
객체(Object)와 인스턴스(Instance)의 차이점 (1) | 2025.02.13 |
---|---|
객체 지향 프로그래밍(OOP)과 절차적 프로그래밍의 차이점 (0) | 2025.02.12 |
[파이썬] range() 함수 (0) | 2025.02.10 |
[파이썬] default 인수와 keyword 인수 정리 (1) | 2025.02.07 |
[파이썬] 매개변수와 전달인자의 차이 (1) | 2025.02.06 |