Skip to content

블랙잭 게임을 통하여 배우는 자바 객체지향 설계 연습하기

Notifications You must be signed in to change notification settings

CBNU-Nnet/java-oop-practice

Repository files navigation

블랙잭 게임

블랙잭 규칙

  • 딜러와 게이머 단 2명만 존재한다.
  • 카드는 조커를 제외한 52장이다. (즉, 카드는 다이아몬드,하트,스페이드,클럽 무늬를 가진 A,2~10,K,Q,J 으로 이루어져있다.)
  • 2~10은 숫자 그대로 점수를, K/Q/J는 10점으로, A는 1로 계산한다. (기존 규칙은 A는 1과 11 둘다 가능하지만 여기선 1만 허용하도록 스펙아웃)
  • 딜러와 게이머는 순차적으로 카드를 하나씩 뽑아 각자 2개의 카드를 소지한다.
  • 게이머는 얼마든지 카드를 추가로 뽑을 수 있다.
  • 딜러는 2카드의 합계 점수가 16점 이하이면 반드시 1장을 추가로 뽑고, 17점 이상이면 추가할 수 없다.
  • 양쪽다 추가 뽑기 없이, 카드를 오픈하면 딜러와 게이머 중 소유한 카드의 합이 21에 가장 가까운 쪽이 승리한다.
  • 단 21을 초과하면 초과한 쪽이 진다.

설계원칙

  • 클래스 우선이 아닌, 객체의 속성과 행위가 우선이다.
    • 클래스는 객체를 추상화하는 도구일 뿐이다.
  • 데이터가 아닌 메세지(행위)를 중심으로 객체를 설계해라.
    • 객체는 혼자 있을 수 없다. 다른 객체와의 협력 안에서만 존재할 수 있다.
    • 메세지를 중심으로, 해당 메세지가 어떤 객체를 필요로 하는지를 생각하자.
  • 하나하나 지시하지 말고 요청해라.
    • 예를들어, 판사가 증인에게 1) 목격했던 장면을 떠올리고, 2) 떠오르는 시간을 순서대로 구성하고, 3) 말로 간결하게 표현해라 라고 요청하지 않는다. 그냥 "증언하라" 라고 요청한다.
    • 마찬가지로 객체의 설계단계에서도 책임이 있는 객체에 요청만 하도록 설계한다.
  • 하나의 메소드는 하나의 일만 해야한다.
  • 처음부터 완벽한 설계는 없다.
    • 설계를 코드로 구현해가는 과정에서 수정이 필요하다면 설계를 수정한다.

주요 객체와 주요 객체의 속성과 역할

카드뭉치 (카드덱)

  • 52개의 서로 다른 카드를 갖고 있다.
  • 카드 1개를 뽑아준다.

카드

  • 다이아몬드, 하트, 스페이드, 클럽 중 1개의 무늬를 가지고 있다.
  • A,2~10,K,Q,J 중 하나를 가지고 있다.

규칙

  • 점수를 측정해준다.
  • 승패를 판단한다.

딜러

  • 추가로 카드를 받는다.
  • 단, 2카드의 합계 점수가 16점 이하이면 반드시 1장을 추가로 뽑고, 17점 이상이면 받을 수 없다.
  • 뽑은 카드를 소유한다.
  • 카드를 오픈한다.

게이머

  • 추가로 카드를 받는다.
  • 뽑은 카드를 소유한다.
  • 카드를 오픈한다.

객체 구조

Object-Diagram

About

블랙잭 게임을 통하여 배우는 자바 객체지향 설계 연습하기

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages