디자인 패턴 8강. 스테이트 패턴(State pattern)

기타/[고급객체지향 프로그래밍]

2019. 12. 13. 21:22

 

[스테이트 패턴의 목적]

: 객체가 내부 상태 바뀔때 객체의 동작을 변경할 수 있도록 한다.

 

 

[스테이트 패턴 구현 기초]

1. 우선 상태들을 모아본다.

동전 있음 / 동전 없음 / 상품 매진 / 상품 판매

2. 각 상태를 저장하기 위한 인스턴스 변수를 만들고 각 값을 정의

final static int SOLD_OUT = 0;

final static int NO_QUARTER = 1;

final static int HAS_QUARTER = 2;

final static int SOLD = 3;

int state = SOLD_OUT;              // 초기 상태

3. 이 시스템에서 있을수 있는 모든 행동을 모은다.

동전 투입 / 동전 반환 / 손잡이 돌림 / 알맹이 내보냄

4. 이제 이 행동들을 구현해, 행동을 구현할때 state가 변하는 것을 구현해준다.

// 동전 투입 구현

public void insertQuarter() {

  if (state == HAS_QUARTER) {

    System.out.println(" 동전은 한개만 넣어주세요");

  } else if (state == SOLD_OUT) {

    System.out.println(" 매진되었습니다. 다음 기회에 이용해주세요");

  } else if (state == SOLD) {

    System.out.println("기대려주세요. 상품이 나오고 있습니다");

  } else if (state == NO_QUARTER) {

    state = HAS_QUARTER;         // 상태 변경

    System.out.println("동전이 투입되었습니다");

  }

}

5. 위와 같이 상태들을 구현 했지만 복잡하다.. 왜?

  : insertQuarter했을때, 동전 상태와 상품 상태 일일히 확인해줘야하고.. 수정시 코드 복잡해지고...

  : 그래서 각 상태에 따라 메소드 수행할 수있게끔 해준다. => state 패턴

 

 

 

[스테이트 패턴 예시]

1. 뽑기 기계

더보기

: 위의 예시// 코드 존재