예제. 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문을 넣고, 인스턴스 생성 후 이를 호출하시오.

클래스 다이어그램

+ Recent posts