책너두 (헤드 퍼스트 디자인 패턴) 31일차 (~427p)

요약

  • 상태 패턴
    • 상태 기계 기초 지식 알아보기
    • 뽑기 기계 코드 만들기
    • 알림! 뽑기 기계 코드 수정 요청
    • 요청 사항 살펴보기

메모

CHAPTER 10. 객체의 상태 바꾸기 : 상태 패턴

상태 기계 기초 지식 알아보기

  • 간단한 상태 기계 구현 방법
  1. 우선 상태들을 모아 봄.
    • ex) 동전 없음, 동전 있음, 알맹이 매진, 알맹이 판매 → 총 4개의 상태가 있음.
  2. 현재 상태를 저장하는 인스턴스 변수를 만들고 각 상태의 값을 정의함.
final static int SOLD_OUT = 0;
final static int NO_QUATER = 1;
final static int HAS_QUATER = 2;
final static int SOLD = 3;

int state = SOLD_OUT;
  1. 이 시스템에서 일어날 수 있는 모든 행동을 모아봄.
    • ex) 동전 투입, 동전 반환, 손잡이 돌림, 알맹이 내보냄
    • 이 행동들은 뽑기 기계의 인터페이스라고 할 수 있음.
  2. 상태 기계 역할을 하는 클래스를 만들어야 함.
public void insertQuater() {
    if (state == HAS_QUATER) {
        System.out.println("동전은 한 개만 넣어주세요.");
    } else if (state == NO_QUATER) {
        state = HAS_QUATER;
        System.out.println("동전이 투입되었습니다.");
    } else if (state == SOLD_OUT) {
        System.out.println("매진되었습니다. 다음 기회에 이용해주세요.");
    } else if (state == SOLD) {
        System.out.println("알맹이름 내보내고 있습니다.");
    }
}
  • 상태 기계를 구현할 때 이런 기법을 많이 사용함.
    • 상태 값을 저장하는 인스턴스 변수를 만들고, 메소드 내에서 조건문을 써서 다양한 상태를 처리함.

뽑기 기계 코드 만들기

  • 현재 상태값을 인스턴스 변수로 저장한다.
  • 상태값으로 모든 행동 및 상태 전환을 처리한다.
  • p420~421 참고

알림! 뽑기 기계 코드 수정 요청

  • 만약, 코드 수정 요청이 온다면?
    • ex) 알맹이에 스티커를 붙임. → 보너스 알맹이

요청 사항 살펴보기

  • 우선 WINNER 상태 (당첨됐다는 사실을 나타내는 상태)를 추가해야 함.
  • WINNER 상태를 확인하는 조건문을 모든 메소드에 추가해야 함.. → 코드를 많이 고쳐야 함.
  • 현재 상태를 나타내는 상태 객체에게 작업을 넘기게하는 방식의 작업이 필요함.

댓글

Designed by JB FACTORY