들어가며
- 업무에 Java를 사용하고 있지만, 깊은 이해도가 부족하다는걸 절감.
- 단순 객체 생성 및 비즈니스 로직 구현에만 매달리고 있음. 회의감이 듦.
- 신규 개발 뿐만 아니라 유지 보수 및 리팩토링시 객체 지향의 묘미를 살려보고자 함
- 객체 지향적 시야와 사고는 연습뿐이라는 것을 여러 커뮤니티에서 수집
- 객체 지향 설계 연습을 통해 객체 지향적 시야와 이해력을 높이고지 함
다시 블랙잭
- 요구 사항 분석을 진행하고 다시 리팩토링해 보겠습니다.
이제부터 객체 지향 생활 체조를 준수하겠습니다.
요구 사항 분석
- 요구 사항은 지속적으로 수정한다.
구분 | 내용 |
---|---|
저자 | 조정하 |
시나리오 | 유저는 게임을 키면 딜러의 플레이 설명을 본뒤, 게임 스타트를 하면 카드 2장을 나눠 받는다. |
시나리오 | 유저는 나눠 받은 2장과 딜러의 2장 카드를 보며 Hit와 Stay를 선택하며, 블랙잭 게임 룰에따라 끝날때까지 게임을 진행한다. |
시나리오 | 초반 코인은 1,000원으로 진행하며 돈이 없어질때까지 또는 게임을 포기할때 까지 블랙잭 게임은 계속된다. |
회피목표 | 실제 블랙잭 모델은 딜러 1명과 7명의 유저까지 게임 플레이가 가능하지만, 현재 V2는 딜러 1명과 유저 1명이 게임 진행 가능하게 만든다. |
회피목표 | V2 버전에서는 세부 규칙 외 기본 딜러 규칙과 기본 유저 규칙만 적용한다. |
세부사항1 | 코드는 객체 지향 생활 체조를 준수 한다. |
세부사항2 | 클래스 다이어그램을 상세하게 다시 작성해야 한다. |
미해결 문제 | 유저의 세부 규칙이 미적용 되어 있다. 스플릿, 더블다운, 인셔런스, 푸시, 이븐머니, 서렌더 등 |
UML V7
지긋지긋 할수도 있는 UML입니다.
다시 요구 분석부터 진행하려 전체적인 구조부터 새로 잡았습니다.
Card는 Hand 클래스의 Pair가 대체합니다. Card 클래스가 꼭 필요하진 않다고 판단 했습니다.
Card는 개인 준수 사항인 2개 이상의 인스턴스 변수를 가지며, Hand 클래스가 대체 가능하므로 제외했습니다.
Deck 또한 딜러만 사용하는 클래스이지만, Hand 클래스와 같은 상태와 행동을 가집니다.
Deck 또한 Hand 클래스로 대체합니다.
Mixer와 Drawer는 객체 지향 생활 체조 준수 사항을 지키기 위해, 기존 클래스의 인스턴스 변수에서 클래스로 분리 했습니다.
Rule 인터페이스가 애매해 고민중입니다.
이상 아래는 V7 버전 UML 입니다.