ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

아메리카노, 카페라떼, 카푸치노 등의 메뉴 확장이 가능한 커피 클래스를 설계해 보세요 #57

Open Leeminw opened 3 months ago

Leeminw commented 3 months ago

문제

예상 꼬리 질문 - 이 커피에는 여러 토핑이 추가 될 수 있습니다. 토핑이 추가될 경우 토핑 만큼의 가격이 추가 될 수 있도록 설계해 주세요. 추가 되는 경우 커피의 앞에 토핑의 이름이 추가되고, 가격이 더해집니다. ex) 아메리카노의 가격이 2000원이고, 모카 토핑의 가격이 500원, 휘핑 토핑의 가격이 1000원 인 경우 모카 휘핑크림 아메리카노의 가격은 3500원이 됩니다. 모카 모카 휘핑크림 아메리카노의 가격은 4000원이 됩니다.

들어가야 할 키워드 정리

kgh2120 commented 3 months ago
예상 답변 ![image](https://github.com/user-attachments/assets/0b7fa460-0634-477b-9563-102989ab6a0e) 우선 Coffee 클래스를 추상 클래스로 만들고, 내부에서 필요한 필드로는 이름을 나타내는 name, 샷의 수량을 뜻하는 amountOfShot, 가격을 뜻하는 price, 그리고 사이즈를 뜻하는 size를 가지고 있게 할 것입니다. 그리고 이를 상속하는 아메리카노, 카페라떼, 에스프레소 클래스를 만듭니다. 아메리카노의 경우 추가적인 물을 넣기 떄문에 amountOfWater를 추가 , 카페라떼의 경우는 우유를 넣기 때문에 amountOfMilk와 우유의 ㅈ종류인 MilkType을 넣고, 에스프레소의 경우 별다른 필드의 추가는 없지만, 에스프레소의 경우 작은 컵으로만 주는 걸로 알고있어 생성자에서 Size를 받지 않으려고 합니다.
예상 꼬리 질문 답변 - 이 커피에는 여러 토핑이 추가 될 수 있습니다. 토핑이 추가될 경우 토핑 만큼의 가격이 추가 될 수 있도록 설계해 주세요. 추가 되는 경우 커피의 앞에 토핑의 이름이 추가되고, 가격이 더해집니다. Topping이라는 추상 클래스 혹은 클래스를 만들고, 이들을 Coffee 추상 클래스가 가지고 있게 하겠습니다. 그리고 이름과 가격을 출력할 때엔 Topping들의 이름과 가격을 합해서 출력하는 형태로 만들겠습니다. ![image](https://github.com/user-attachments/assets/5a99a91d-fdd6-4687-b3a2-f42f7710be98)
Leeminw commented 3 months ago
예상답변

커피라는 추상클래스를 생성하고, 이를 상속받는 아메리카노, 라떼 등등의 클래스를 생성할수 있습니다. 토핑의 경우 데코레이터 패턴을 이용해서 자신을 감싸는 형태로 구현할 수 있습니다. ![image](https://github.com/user-attachments/assets/3e4a597e-5291-482f-902e-94cca30385a7)

kjy0349 commented 3 months ago
예상 답변

먼저 커피의 경우 샷이 항상 들어가기 때문에 샷의 수, 추가적으로는 가격, 사이즈, 이름을 필드로 가지고 있겠습니다. 이후 카페라떼, 카푸치노와 같은 커피들은 우유와 거품이라는 추가 재료가 필요하기 때문에 각각 커피 클래스를 상속받아 우유의 양, 거품의 양등을 가진 필드를 추가하겠습니다.

예상 꼬리질문 답변

커피 클래스가 토핑 클래스를 리스트형태로 가지게 하겠습니다. 토핑에도 해당 토핑의 가격, 기존 이름에 추가할 토핑 이름, 개수를 추가하는 형식으로 설계하겠습니다.

Hunnibs commented 3 months ago
질문 답변

아메리카노, 카페라떼, 카푸치노 모두 커피가 중심이 되는 메뉴입니다. 그렇기 때문에 커피 클래스를 추상 클래스로 만들어놓고 해당 클래스에 shot이 몇 개가 들어가는지 Integer 값으로 설정합니다. 나머지 아메리카노, 카페라떼, 카푸치노는 해당 커피 추상 클래스를 상속받아 shot이 몇 개가 들어가는지 overriding을 해서 사용할 수 있습니다. 또한 아메리카노는 water이 얼마나 들어가는지 Integer값으로 설정, 카페라떼와 카푸치노는 우유가 어느정도 들어가는지 설정할 수 있습니다. 다른 커피를 이용한 음료도 얼마든지 확장이 가능합니다.

꼬리 질문

- 이 커피에는 여러 토핑이 추가 될 수 있습니다. 토핑이 추가될 경우 토핑 만큼의 가격이 추가 될 수 있도록 설계해 주세요. 추가 되는 경우 커피의 앞에 토핑의 이름이 추가되고, 가격이 더해집니다. ex) 아메리카노의 가격이 2000원이고, 모카 토핑의 가격이 500원, 휘핑 토핑의 가격이 1000원 인 경우 모카 휘핑크림 아메리카노의 가격은 3500원이 됩니다. 모카 모카 휘핑크림 아메리카노의 가격은 4000원이 됩니다. 우선 추상 클래스에 샷 하나 당 가격을 Integer로 추가합니다. 그리고 데코레이터 패턴을 이용해서 토핑을 추가하는 방식을 생각해봤습니다. Coffee라는 추상 클래스를 상속받아 토핑이라는 클래스를 만듭니다. 해당 클래스를 상속 받아 각각 토핑 클래스들을 만들어놓고 사용하는 방식입니다. 만약 latte에 hazelnut이라는 토핑을 추가하고 싶다면 Latte latte = new Hazelnut(new Latte) 이런식으로 가능합니다.