본문 바로가기

공부방/Upstage AI Lab 4기

7/31 학습일지 | 파이썬 클래스 연습문제 1

문제 2. 음식 주문 시스템 만들기

이 시스템은 메뉴를 관리하고, 주문을 받아 처리하는 기능을 가집니다. 여기서는 메뉴 클래스(Menu), 주문 클래스(Order), 그리고 주문 관리 클래스(OrderManager)를 구현합니다.

  1. Menu 클래스: 음식 이름과 가격을 관리합니다.
  2. Order 클래스: 특정 메뉴 항목에 대한 주문을 담습니다. 주문 번호와 주문한 메뉴 항목의 리스트를 포함합니다.
  3. OrderManager 클래스: 모든 주문을 관리합니다. 새 주문을 추가하고, 모든 주문을 보여주는 기능을 가집니다.

위의 3가지를 기능을 아래 템플릿에 맞춰서 클래스로 구현해보세요.
클래스 구현이 완료되면, 아래 실행 예시가 올바르게 실행되어야 합니다!

 


1. Menu 클래스 만들기

class Menu:
    def __init__(self, name, price) :
        self.name = name
        self.price = price

    def __str__(self):
        return f"{self.name}: ${self.price}"

pizza = Menu("Pizza", 10)
pasta = Menu("Pasta", 8)
salad = Menu("Salad", 5)

 

2. Order 클래스 만들기

class Order :
    ID = 0 #클래스 변수
    
    def __init__(self):
        Order.ID += 1 #1, 2, 3
        self.ID = Order.ID
        self.orderlist = [ ]

    def add_item(self, name):
        self.orderlist.append(name)

Order 클래스에는 order1, order2, order3 ... 이런 식으로 속성을 갖고, 횟수에 따라 Order가 누적된다.
ID=0 이 부분은 def 바깥(인스턴스 메서드 바깥에서 정의)에 위치하는데, 이걸 클래스 변수라고 부르고 클래스의 모든 인스턴스가 공유하는 변수이다. 처음으로 add_item을 하면 ID가 1로 증가하고, self.ID 에 1을 담아주고, orderlist를 만든다. add_item을 한 번 더 하면 ID가 2가 되고 order2의 orderlist가 다시 만들어진다. 이 orderlist에는 add_item에서 받는 이름이 들어간다. 

 

3. OrderManager 클래스 만들기

class OrderManager : 
    def __init__(self) :
        self.orders = [] 
        #self.orders는 OrderManager의 인스턴스 변수. 이 변수에 빈 리스트를 할당해줌. 
        #주문을 관리할 리스트. 여기에 order1, order2가 저장되게 할거야
        #order1, order2는 Order 클래스의 인스턴스들. 이걸 가져와야해. 어떻게? 바로 아래!)

    def add_new_order(self):
        order = Order() 
        # Order 인스턴스를 가져온다. 새로운 Order 인스턴스 생성!!! 
        #Order 클래스의 객체를 가져와서 order에 저장함.
        self.orders.append(order) 
        #빈리스트에 order에 저장된 값을 붙인다. 
        #여기 Order 클래스 인스턴스가 들어가서, 그 속성인 ID와 orderlist에 접근할 수 있다. 
        return order 
        
    def show_all_orders(self):
        for order in self.orders: 
        #주문들(order1, order2...)이 들어있는 리스트에서 주문을 하나씩 빼온다
            print("Order ID:", order.ID) 
            #위에서 Order 클래스 인스턴스가 들어가서, 그 속성인 ID와 orderlist에 접근할 수 있다. 
            print("Items Ordered:")
            for item in order.orderlist:
                print(item)
            print(" ")

 

객체 지향 프로그래밍이라는 것... 아직도 난해하다

OrderManager 클래스는 Order 클래스의 인스턴스들을 생성하고 관리합니다. OrderManager 클래스가 Order 클래스의 메서드나 속성을 사용할 수 있는 이유는, OrderManager 클래스가 Order 클래스의 인스턴스를 생성하고, 이 인스턴스들의 속성과 메서드에 접근하기 때문입니다. 이는 객체 지향 프로그래밍의 기본 개념인 "객체의 조합"을 통해 이루어집니다.