예제. Book 클래스 정의하기
아래의 클래스 다이어그램을 보고 파이썬으로 클래스를 정의하고, 클래스의 인스턴스를 2개 이상 만들어 매소드를 호출 하시오.
클래스 다이어그램
| 클래스 다이어그램 | 클래스 설명 |
![]() |
- 클래스의 이름은 Book이다. - 클래스 속성은 id, title, .... loanStatus 이다. - 클래스 속성은 외부로부터 정보를 보화기 위해 private (-표시) 으로 정의한다. - 클래스 매서드는 getter/setter, add(), modify(), ... 등이 있다. - 클래스 매서드는 외부에서 호출 가능해야 하므로 public(+표시) 으로 정의한다. - getter/setter는 속성값을 접근하는 함수로 데코레이터나 getter/setter함수를 정의한다. - add(), modify(), dispose(), search() 함수는 body에 함수 명을 출력하는 기능을 추가한다. - add() 함수의 예 def add (self): print(f" add() 입니다.") |
예상 코드
더보기
1. 데코레이터 @property의 사용
class Book:
def __init__(self, id, title, author, publisher,
publishedYear, genre, ISBN, loanStatus):
self.__id = id
self.__title = title
self.__author = author
self.__publisher = publisher
self.__publishedYear = publishedYear
self.__genre = genre
self.__ISBN = ISBN
self.__loanStatus = loanStatus
# =====================
# Getter / Setter 정의
# =====================
@property
def id(self):
return self.__id
@id.setter
def id(self, value):
self.__id = value
@property
def title(self):
return self.__title
@title.setter
def title(self, value):
self.__title = value
@property
def author(self):
return self.__author
@author.setter
def author(self, value):
self.__author = value
@property
def publisher(self):
return self.__publisher
@publisher.setter
def publisher(self, value):
self.__publisher = value
# setter에서 값 체크하는 예 -exception 발생예
@property
def publishedYear(self):
return self.__publishedYear
@publishedYear.setter
def publishedYear(self, value):
if value < 0:
raise ValueError("출판 연도는 음수일 수 없습니다.")
self.__publishedYear = value
@property
def genre(self):
return self.__genre
@genre.setter
def genre(self, value):
self.__genre = value
@property
def ISBN(self):
return self.__ISBN
@ISBN.setter
def ISBN(self, value):
self.__ISBN = value
@property
def loanStatus(self):
return self.__loanStatus
@loanStatus.setter
def loanStatus(self, value):
self.__loanStatus = value
# =====================
# Public Method 정의
# =====================
def add(self):
print("add() 입니다.")
def modify(self):
print("modify() 입니다.")
def dispose(self):
print("dispose() 입니다.")
def search(self):
print("search() 입니다.")
# =====================
# 인스턴스 생성
# =====================
book1 = Book(1, "Python OOP", "Kim", "Hanbit",
2023, "IT", "123456789", "AVAILABLE")
book2 = Book(2, "Data Structure", "Lee", "InfoPub",
2022, "CS", "987654321", "BORROWED")
# =====================
# getter 사용
# =====================
print("book1 제목:", book1.title)
print("book2 상태:", book2.loanStatus)
# =====================
# setter 사용 (정상)
# =====================
book1.loanStatus = "BORROWED"
print("book1 변경된 상태:", book1.loanStatus)
# =====================
# exception 테스트
# =====================
try:
book2.publishedYear = -2024
print("변경 성공:", book2.publishedYear)
except ValueError as e:
print("update error:", e)
# =====================
# public 메서드 호출
# =====================
book1.add()
book1.modify()
book2.dispose()
book2.search()
2. 일반적인 getter/setter 함수의 사용
class Book:
def __init__(self, id, title, author, publisher,
publishedYear, genre, ISBN, loanStatus):
self.__id = id
self.__title = title
self.__author = author
self.__publisher = publisher
self.__publishedYear = publishedYear
self.__genre = genre
self.__ISBN = ISBN
self.__loanStatus = loanStatus
# =====================
# Getter / Setter 함수
# =====================
def get_id(self):
return self.__id
def set_id(self, value):
self.__id = value
def get_title(self):
return self.__title
def set_title(self, value):
self.__title = value
def get_author(self):
return self.__author
def set_author(self, value):
self.__author = value
def get_publisher(self):
return self.__publisher
def set_publisher(self, value):
self.__publisher = value
def get_publishedYear(self):
return self.__publishedYear
# 연도 입력값 체크, 함수의 return값 적용
def set_publishedYear(self, value):
if value < 0:
print("출판 연도 오류")
return False
self.__publishedYear = value
return True
def get_genre(self):
return self.__genre
def set_genre(self, value):
self.__genre = value
def get_ISBN(self):
return self.__ISBN
def set_ISBN(self, value):
self.__ISBN = value
def get_loanStatus(self):
return self.__loanStatus
def set_loanStatus(self, value):
self.__loanStatus = value
# =====================
# Public Method 정의
# =====================
def add(self):
print("add() 입니다.")
def modify(self):
print("modify() 입니다.")
def dispose(self):
print("dispose() 입니다.")
def search(self):
print("search() 입니다.")
# =====================
# 인스턴스 생성
# =====================
book1 = Book(1, "Python OOP", "Kim", "Hanbit",
2023, "IT", "123456789", "AVAILABLE")
book2 = Book(2, "Data Structure", "Lee", "InfoPub",
2022, "CS", "987654321", "BORROWED")
# =====================
# getter 사용
# =====================
print("book1 제목:", book1.get_title())
print("book2 상태:", book2.get_loanStatus())
# =====================
# setter 사용
# =====================
book1.set_loanStatus("BORROWED")
print("book1 변경된 상태:", book1.get_loanStatus())
# =====================
# 오류 처리 포함 setter
# =====================
result = book2.set_publishedYear(-2024)
if result == False:
print("update error")
else:
print("변경 성공:", book2.get_publishedYear())
# =====================
# public 메서드 호출
# =====================
book1.add()
book1.modify()
book2.dispose()
book2.search()
실습1. Student 클래스 정의하기
Student Class를 파이썬으로 구현하시오.
- 속성을 private으로 정의 하시오.
- 각 속성에 대해 외부에서 사용할 수 있도록 @property를 사용하여 getter를 정의 하시오.
- getter에 print문을 넣고, 인스턴스 생성 후 이를 호출하시오.
클래스 다이어그램

실습2. 키오스크 시스템의 Coffee 클래스 정의하기
Coffee Class를 파이썬으로 구현하시오.
- 속성을 private으로 정의 하시오.
- 각 속성에 대해 외부에서 사용할 수 있도록 @property를 사용하여 getter를 정의 하시오. (코드1)
- 각 속성에 대해 외부에서 사용할 수 있도록 getter/setter 함수를 사용하여 정의 하시오. (코드2)
- getter에 print문을 넣고, 인스턴스 생성 후 이를 호출하시오.
클래스 다이어그램

'[2] 객체지향 프로그래밍 설계(파이썬) > 4주차. 정보은닉' 카테고리의 다른 글
| 4.1 [개념] 클래스 특징 2. 정보은닉 (0) | 2026.01.26 |
|---|
