[level1] 블랙잭(베팅) 2단계

유콩·2022년 3월 21일
0

우아한테크코스

목록 보기
10/15

우아한테크코스 레벨1 미션인 블랙잭의 2단계 피드백 내용을 정리한다.

상태패턴

리뷰어분의 피드백에서 나온 내용은 아니고 우테코에서 블랙잭 미션의 전체 피드백에서 언급한 디자인 패턴이었다. 새로운 디자인 패턴을 적용해보고 싶어서 강의에서 설명해주신 구조 그대로 써봤다.

상태패턴을 간략하게 설명한다면 각 상태별로 수행해야 하는 기능을 달리 표현하기 위해 상태값들을 객체로 분리하는 구조이다. 이번 블랙잭 미션에서는 상태정보를 카드의 상태 를 기준으로 두어 카드가 없는 상태(Ready), 카드를 받을 수 있는 상태(Hit), 카드를 받지 않겠다고 한 상태(Stay), 카드가 21을 넘긴 상태(Bust), 카드가 블랙잭인 상태(Blackjack) 로 나누어 특정 기능을 수행할 때 객체에 맞는 로직을 처리하였다.

instanceof

다양한 클래스를 상속 구조로 묶다보니 어떤 상태(객체)인지 확인해야 하는 과정이 필요했다. instanceof 를 이용하여 객체를 판단한다면 기껏 캡슐화한 구조의 의미가 없어진다. 하나의 그룹(State)으로 묶어둔 것을 사용하는 측에서 다시 끄집어내는 instanceof 가 아닌 메인 클래스(State)에 물어보는 형식으로 바꾸었다.

Pattern

숫자인지 검증하는 로직에서 String.matches 를 사용하였다. 피드백을 받고 찾아보니 String 의 matches 는 내부적으로 호출될 때마다 Pattern 의 객체를 생성한다. 동일한 패턴이라도 재사용하지 않기 때문에 가비지컬렉션의 대상이 된다. 반복문에서 사용하거나 나와 같이 동일한 검증을 여러 곳에서 해야하는 경우 Pattern 을 이용하여 미리 정의 및 컴파일 해두고 재사용한다면 불필요한 객체를 생성하지 않을 수 있다.

상속 내 변수


이건 그냥 내가 잘못 사용했다...😭 나름의 변명을 해보자면 새벽에 짠 코드라 정신이 오락가락했다..😭😭😭

State 객체 내에 카드 정보베팅 금액 을 보유하고 StateDealerPlayer 가 보유한다. 딜러는 베팅을 하는 기능이 없기 때문에 불필요한 값을 가지게 된 것이다. 다음에 상속 구조 설계 시 신경쓰기 위해 추가해보았다...


미션을 진행할 때마다 이제 더 피드백 받을 것이 있나? 하지만 우수수 받는다.ㅋㅋ 다들 다른 리뷰어분들이었지만 학습하기 쉽도록 내 실력을 파악하여 적당한 난이도로 피드백을 주셔서 적당한 속도로 공부할 수 있어서 좋았다.

0개의 댓글