https://github.com/woowacourse/java-blackjack/tree/nbalance97

 

GitHub - woowacourse/java-blackjack: 블랙잭 미션 저장소

블랙잭 미션 저장소. Contribute to woowacourse/java-blackjack development by creating an account on GitHub.

github.com

 


미션 진행


 

블랙잭 미션 2단계에서는 총 두가지의 기능을 추가해야 한다.

 

1. 각각의 참여자의 금액을 입력받는 기능

2. 승/블랙잭 승/패/무 시 획득하는 이윤을 계산하는 기능

 

기능을 추가하는데는 그렇게 어렵진 않았다😀

구현을 위해 User 클래스에 bettingPrice 필드를 추가하고, 해당 필드에 값을 입력받는 로직을 추가하였다.

또한, 승/패/무에 따라 사용자의 이윤을 계산하는 클래스(UserProfit)를 두어 이윤을 계산하게 하였으며, 딜러의 이윤은 사용자의 이윤의 총합으로 계산하도록 구성하였다 (DealerResult) 😆

 

이번에 딜러의 이윤이나 블랙잭 승/패를 구하는 로직을 Enum 클래스를 활용해서 작성해 보았다.

정적 메서드인 checkUserResult에서 유저와 딜러를 입력받아서 유저의 승/무/패를 구하도록 로직을 작성하였다.

 

 

기존에는 Enum 클래스를 상수 처리를 위해서만 사용했다면, 이번에 Enum 클래스의 필드에 함수형 인터페이스를 두는 방식을 사용 해 보았다. 위와 같은 방식으로 승/패 로직을 구성하면 if문을 줄일 수 있어서 좋았다 😃 

 

 


리뷰 및 리팩토링


리뷰를 받고, 리팩토링을 하면서 느낀 점은 기존 코드에서 Controller에서 너무 많은 일을 하고 있다는 점이다.😂

리팩토링에서 주로 Controller에서의 일을 많이 줄이고, 컨트롤러에 존재했던 로직을 도메인이나 뷰로 많이 이동시켰던 것 같다. 

 

딜러 이름 검사를 컨트롤러에서 해줄 필요가 없었는데.. 관련 로직을 도메인으로 이동시켜서 내부에서 처리하도록 구현하였다.

 

컨트롤러에서 유저 이름과 베팅 금액을 매핑시켜 줬었는데, 컨트롤러가 수행해야 할 일은 아니라고 생각되었다.

이 점은 InputView에게 이름을 넘겨 주어서 이름과 베팅 금액을 매핑시킨 Map을 가져오도록 변경하였다.

 

상수가 중복된다는 점은 전혀 모르고 있었다. 😇 동일한 상수가 중복된다는 것은 동일한 검사 로직이 많은 클래스에 퍼져 있는 것이라고 생각한다. 이에 따라 점수 계산은 근본적으로 Participant 클래스에서 하므로, Participant 클래스에서만 상수 21을 관리하도록 변경하였으며 나머지 클래스에서는 관련 로직을 제거해 주었다.

 


결론


레벨 1에서의 블랙잭 미션에서는 enum 클래스를 다양하게 사용해 본 거 같다😄 확실히 enum 클래스를 사용하면 if문이 여러 번 나오거나 꼬일 때 많이 줄일 수 있는 것 같아 좋은 것 같다.

 

체감상 아직 Controller의 역할이 어디 까지인지 모호하게 느껴진다😅 그래도 이번 미션에서는 출력을 위한 클래스와 enum 클래스의 활용법에 대해서 많이 알아간 것 같다.

+ Recent posts