Open Leeminw opened 3 months ago
커피라는 추상클래스를 생성하고, 이를 상속받는 아메리카노, 라떼 등등의 클래스를 생성할수 있습니다. 토핑의 경우 데코레이터 패턴을 이용해서 자신을 감싸는 형태로 구현할 수 있습니다. ![image](https://github.com/user-attachments/assets/3e4a597e-5291-482f-902e-94cca30385a7)
먼저 커피의 경우 샷이 항상 들어가기 때문에 샷의 수, 추가적으로는 가격, 사이즈, 이름을 필드로 가지고 있겠습니다. 이후 카페라떼, 카푸치노와 같은 커피들은 우유와 거품이라는 추가 재료가 필요하기 때문에 각각 커피 클래스를 상속받아 우유의 양, 거품의 양등을 가진 필드를 추가하겠습니다.
커피 클래스가 토핑 클래스를 리스트형태로 가지게 하겠습니다. 토핑에도 해당 토핑의 가격, 기존 이름에 추가할 토핑 이름, 개수를 추가하는 형식으로 설계하겠습니다.
아메리카노, 카페라떼, 카푸치노 모두 커피가 중심이 되는 메뉴입니다. 그렇기 때문에 커피 클래스를 추상 클래스로 만들어놓고 해당 클래스에 shot이 몇 개가 들어가는지 Integer 값으로 설정합니다. 나머지 아메리카노, 카페라떼, 카푸치노는 해당 커피 추상 클래스를 상속받아 shot이 몇 개가 들어가는지 overriding을 해서 사용할 수 있습니다. 또한 아메리카노는 water이 얼마나 들어가는지 Integer값으로 설정, 카페라떼와 카푸치노는 우유가 어느정도 들어가는지 설정할 수 있습니다. 다른 커피를 이용한 음료도 얼마든지 확장이 가능합니다.
- 이 커피에는 여러 토핑이 추가 될 수 있습니다. 토핑이 추가될 경우 토핑 만큼의 가격이 추가 될 수 있도록 설계해 주세요. 추가 되는 경우 커피의 앞에 토핑의 이름이 추가되고, 가격이 더해집니다. ex) 아메리카노의 가격이 2000원이고, 모카 토핑의 가격이 500원, 휘핑 토핑의 가격이 1000원 인 경우 모카 휘핑크림 아메리카노의 가격은 3500원이 됩니다. 모카 모카 휘핑크림 아메리카노의 가격은 4000원이 됩니다. 우선 추상 클래스에 샷 하나 당 가격을 Integer로 추가합니다. 그리고 데코레이터 패턴을 이용해서 토핑을 추가하는 방식을 생각해봤습니다. Coffee라는 추상 클래스를 상속받아 토핑이라는 클래스를 만듭니다. 해당 클래스를 상속 받아 각각 토핑 클래스들을 만들어놓고 사용하는 방식입니다. 만약 latte에 hazelnut이라는 토핑을 추가하고 싶다면 Latte latte = new Hazelnut(new Latte) 이런식으로 가능합니다.
문제
예상 꼬리 질문
- 이 커피에는 여러 토핑이 추가 될 수 있습니다. 토핑이 추가될 경우 토핑 만큼의 가격이 추가 될 수 있도록 설계해 주세요. 추가 되는 경우 커피의 앞에 토핑의 이름이 추가되고, 가격이 더해집니다. ex) 아메리카노의 가격이 2000원이고, 모카 토핑의 가격이 500원, 휘핑 토핑의 가격이 1000원 인 경우 모카 휘핑크림 아메리카노의 가격은 3500원이 됩니다. 모카 모카 휘핑크림 아메리카노의 가격은 4000원이 됩니다.들어가야 할 키워드 정리