[우아한테크코스] 6주차 회고

시간이 너무 빠르게 지나가 정신차리면 맨날 회고만 작성하는 것 같다.ㅋㅋ

블랙잭 2단계 리팩토링

블랙잭 미션 2단계 PR 을 늦게보내 아직 코드리뷰를 받지 않았지만 블랙잭 전체 피드백에 소개된 상태패턴 을 사용하였다. 강의로도 직접 시범을 보여주셔서 꼭! 써보고 싶어 적용해보았으나 아직까지는 잘 짜여진 것인지 모르겠다.

블랙잭 1단계에서 플레이어(또는 딜러)가 가지는 정보가 이름, 카드, 게임 결과(승,무,패) 등이 있었고 요구사항중에 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다 가 있어서 게임 결과를 억지로 다른 클래스로 분리하였다. 어차피 모든 플레이어를 돌아가면서 확인 후 출력해야 했기에 별도의 객체에 모든 정보를 모아놓는 것이 어색하지 않았다. 근데..!! 2단계에서 베팅 금액 정보가 추가되면서 약간 당황했다. 베팅 금액도 플레이어가 관리해야 하는 대상이라고 생각했고 인스턴스 변수 제약때문에 게임 결과와 마찬가지로 별도의 클래스에 모든 베팅 정보를 보관하였다.

private final Map<Player, Betting> bettings = new HashMap<>();

위의 코드처럼 플레이어를 키로 가지는 맵에서 베팅 금액을 보관하고 수익 계산 시 꺼내서 사용하였다. 부자연스러운 흐름이라고 생각은 들었으나 인스턴스 변수 제한을 맞추기 위해서 나름 나의 최선으로 분리해본 것이었다.

상태패턴에 대한 강의를 듣고 처음엔 그저 새로운 패턴을 써보고 싶다는 생각뿐이었다. 근데 실제로 적용해보니 객체 간 가지는 책임이 분리되고 자연스럽게 인스턴스 변수 제한도 맞추어졌다. 이전에는 먼저 이름과 카드 정보를 플레이어에게 주어서 미처 담지 못한 클래스들을 분리하였다. 하지만 현재 카드 상태 를 객체로 생성하고 특정 상태에게 카드베팅 금액 을 주고 플레이어는 상태 정보와 이름 만 가지므로 자연스럽게 플레이어가 가지는 인스턴스 변수의 수가 줄었다.

아직까지는 상태를 객체로 만든다는 것이 어색하지만 직접 짜보니 특정 상태에 대한 기능을 추가 하기에도 편리했고 객체 간 책임이 분리되어 코드가 전체적으로 깔끔 해졌다. 아래는 상태 객체들의 클래스 다이어그램이다. 아주 간단하게 구조만 그려봤다...😁

지난 주 목표

매일 오전에 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 들었었는데 요즘은 피로가 쌓였는지 매일 늦잠잔다. 데일리 미팅 시간에 맞추기도 빠듯해 강의 듣는 것을 패스했더니 이번주는 하나도 안봤다...🥲 지금 필요한 것은 아니니 레벨1동안 끝내는 것을 목표로 하려고 한다.

다음 주 목표

  • 모던 자바 인 액션
    제이슨과 면담 중에 모던 자바 인 액션 을 언제 시작하는 것이 좋겠냐는 질문에 지금! 이라고 하셔서 바로 샀다. 매일 책만 늘어나는 것같은데 기분탓이겠지.😗 목차를 슬쩍 보니 최근에 알게된 내용들도 있어서 미션하면서 모르는 것만 참고하며 천천히 읽을 예정이다.

좋은 웹페이지 즐겨찾기