객체 지향 설계 연습하기 - 블랙잭 (6)
0. 들어가며
- 업무에 Java를 사용하고 있지만, 깊은 이해도가 부족하다는걸 절감.
- 단순 객체 생성 및 비즈니스 로직 구현에만 매달리고 있음. 회의감이 듦.
- 신규 개발 뿐만 아니라 유지 보수 및 리팩토링시 객체 지향의 묘미를 살려보고자 함
- 객체 지향적 시야와 사고는 연습뿐이라는 것을 여러 커뮤니티에서 수집
- 객체 지향 설계 연습을 통해 객체 지향적 시야와 이해력을 높이고지 함
1. UML 수정
UML은 전혀 사용해보지 않은 사람으로써, 학부때 맛만 봤다는 것을 알린다… 따라서 아래 UML은 전혀 사실과 다를 수도 있다. UML에 대한 댓글 환영합니다.
UML 수정 했습니다.
아레 레퍼런스에 있는 UML 참고 블로그에서 하나씩 읽어본 결과, DENOMINATION, SUIT, CARD, DECK, HAND, DEALER, PLAYER는 강집합 관계인걸로 판단했습니다. 끗수와 모양은 카드의 존재 가치이고, 카드가 없으면 끗수와 모양도 없습니다. (블랙잭 게임 내에서) 또 덱은 카드가 없으면, 딜러와 플레이어는 핸드와 덱이 없으면 존재 가치가 없습니다. Hand에 있는 Card가 애매한데
Card를 직접 Hand 내에서 객체 생성 및 의존성이 있는 것은 아니지만, 리스트에 카드를 담아 놓으므로 연관성은 있어 보입니다. 핸드 클래스 내에서 카드는 있어도 되고 없어도 되지만, 핸드의 필수 요소 입니다. 하지만, 카드가 없다 해도 Hand가 없어지진 않습니다. 다만, 게임 관례상 핸드에 카드가 없는 경우는 없습니다.
따라서 Hand 클래스의 부분처럼 보여, Hand와 Card의 관계를 Aggregation으로 설정했습니다.