Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[오렌지] 치킨집 미션 제출합니다 #4

Open
wants to merge 12 commits into
base: tdd-orange
Choose a base branch
from

Conversation

YerinCho
Copy link

일단 구현만 다 했습니다.
곧 리팩토링 더 진행하겠습니다!

@YerinCho YerinCho changed the title [오렌지] 치킨집 미션 진행합니다 [오렌지] 치킨집 미션 제출합니다 Jun 27, 2020
Copy link
Member

@hongbin-dev hongbin-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요. 오렌지! 앨런입니다.👍👍
미션 진행하느라 수고많으셨습니다.
간단한 리뷰 남겨봅니다
감사합니다. ✌✌

src/main/java/Application.java Outdated Show resolved Hide resolved
src/main/java/controller/Controller.java Outdated Show resolved Hide resolved
src/main/java/controller/Controller.java Outdated Show resolved Hide resolved
src/main/java/domain/Count.java Show resolved Hide resolved
Comment on lines +22 to +25
public Count addCount(Count count) {
final int addResult = this.count + count.getCount();
return new Count(addResult);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Count를 싱글인스턴스로 사용하는건 어떨까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

불변을 보장하고 싶어서 새 Count객체를 반환하도록 구현했습니다.
앨런은 어떻게 생각하시나요? 정식 리뷰어가 아니어서.. ㅎㅎ 귀찮으시면 대답은 안하셔도 됩니다 ㅋㅋㅋ

src/main/java/domain/Order.java Show resolved Hide resolved
src/main/java/domain/Order.java Show resolved Hide resolved
Comment on lines +7 to +9
public class Orders {
public static final int CHICKEN_SET_UNIT = 10;
private final List<Order> orders = new ArrayList<>();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orders의 자료구조를 List를 사용하고 있습니다.
여러개의 주문이 있을때, 각 주문한 메뉴들을 찾아가는 경우가 많을걸로 예상되는데요. (추가 주문)
다른 자료구조를 사용해보는건 어떨까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어차피 중복 허용도 아니고 순서가 중요한 것도 아니니까 성능상 List보단 Set이 나을 것 같네요.
아마 앨런의 의도는 Map이겠죠? 처음 구현할 땐 Map이랑 고민을 했었어요!
검색에 대한 성능은 메뉴를 기준으로 탐색하는 Map이 더 좋긴 하겠지만,
map(Map<Menu, Count>)으로 관리를 하게 되면 order 클래스에서 하는 일을 orders 에서 해야 하기도 하고
주문한 종류마다 따로 관리를 하고 싶어서 메뉴과 수량을 갖고 있는 Order객체를 따로 만들었습니다.
그래서 결과적으로 Map을 사용하지 않게 되었습니다. Set을 사용하게 되면 성능상으로도 비슷하지 않을까요...?

src/main/java/domain/Orders.java Show resolved Hide resolved
src/main/java/domain/Orders.java Show resolved Hide resolved
Copy link

@ksy90101 ksy90101 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요! 오렌지, 로또 다음에 바로 리뷰를 맡게 되었네요~
간단한 피드백 남겼으니, 수정 후 다시 코드 리뷰 요청 해주세요!
방학때인데, 고생 많으셨습니다!

src/main/java/Application.java Outdated Show resolved Hide resolved
src/main/java/Application.java Outdated Show resolved Hide resolved
src/main/java/controller/Controller.java Outdated Show resolved Hide resolved
Comment on lines +49 to +54
try {
OutputView.printTables(tables);
return TableRepository.findTableByNumber(InputView.inputTableNumber());
} catch (IllegalArgumentException e) {
OutputView.printError(e.getMessage());
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메서드를 분리하면 depth를 줄일 수 있지 않을까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

run 예외처리에 대한 답변과 비슷한 맥락이라 메소드를 분리해도 크게 달라질 것 같진 않네요 ㅠㅠ

src/main/java/domain/Count.java Show resolved Hide resolved
src/test/java/domain/OrdersTest.java Show resolved Hide resolved
Comment on lines +74 to +78
try {
return new Count(InputView.inputMenuCount());
} catch (IllegalArgumentException e) {
OutputView.printError(e.getMessage());
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어차피 run에서 예외처리를 하는데, 여기서 해야 할 이유가 있을까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

run에서는 메인기능 선택에 대한 예외처리를 받으려고 한 거고,
이 예외처리는 Count 입력의 실패만을 위한 처리라... 사용자 입장에서 중간에 실패했는데 처음부터 다시 하라하면 짜증나니까 이렇게 구현을 해 보았습니다 . . .ㅜㅜ

src/main/java/domain/Count.java Show resolved Hide resolved
src/main/java/domain/Orders.java Show resolved Hide resolved
src/main/java/domain/PaymentType.java Show resolved Hide resolved
 boolean 리턴형 void 로 변경
 종료조건 판단 생략하고 프로그램 종료 선택시 바로 종료하도록 변경
Copy link

@KS-KIM KS-KIM left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 오렌지🍊
치킨집 미션 잘 구현해 주셨네요.
다른분들이 이미 피드백을 남기셔서 간단히 생각할만한 부분만 짚어 보았습니다.
궁금한 점 있으시면 DM 주세요.

src/main/java/Application.java Outdated Show resolved Hide resolved
src/main/java/domain/MainType.java Show resolved Hide resolved
src/main/java/domain/Menu.java Show resolved Hide resolved
src/main/java/domain/Orders.java Show resolved Hide resolved
src/main/java/domain/Orders.java Show resolved Hide resolved
src/main/java/domain/Orders.java Show resolved Hide resolved
Comment on lines +7 to +27
CARD(1) {
@Override
public double calculate(Orders orders) {
List<Order> order = orders.getOrders();
int totalPrice = order.stream()
.mapToInt(Order::getTotalPrice)
.sum();
return totalPrice - calculateChickenDiscount(orders);
}
},

CASH(2) {
@Override
public double calculate(Orders orders) {
List<Order> order = orders.getOrders();
double total = order.stream()
.mapToInt(Order::getTotalPrice)
.sum();
return (total - calculateChickenDiscount(orders)) * CASH_DISCOUNT_RATE;
}
};
Copy link

@KS-KIM KS-KIM Jun 27, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

치킨집 사장님이 변심해서 치킨 10마리당 할인을 폐지한다면 결제 방식에 따른 할인 적용 코드를 수정해야겠죠? 결제 방식에 따른 할인에 속한 '치킨 할인'의 종속성을 제거해보는게 좋을 것 같아요.

또한, 결제 방식별로 할인율(퍼센티지)만 다를 뿐 계산 방식은 동일한 상황인데, 중복되는 코드를 제거할 방법을 찾아보는게 어떨까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

같은 메소드를 사용하도록 하고, 할인률 속성만 추가해서 중복을 제거했습니다.

src/main/java/domain/PaymentType.java Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants