요약
- 상태 패턴
- 상태 기계 기초 지식 알아보기
- 뽑기 기계 코드 만들기
- 알림! 뽑기 기계 코드 수정 요청
- 요청 사항 살펴보기
메모
CHAPTER 10. 객체의 상태 바꾸기 : 상태 패턴
상태 기계 기초 지식 알아보기
- 우선 상태들을 모아 봄.
- ex) 동전 없음, 동전 있음, 알맹이 매진, 알맹이 판매 → 총 4개의 상태가 있음.
- 현재 상태를 저장하는 인스턴스 변수를 만들고 각 상태의 값을 정의함.
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;
- 이 시스템에서 일어날 수 있는 모든 행동을 모아봄.
- ex) 동전 투입, 동전 반환, 손잡이 돌림, 알맹이 내보냄
- 이 행동들은 뽑기 기계의 인터페이스라고 할 수 있음.
- 상태 기계 역할을 하는 클래스를 만들어야 함.
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 상태를 확인하는 조건문을 모든 메소드에 추가해야 함.. → 코드를 많이 고쳐야 함.
- 현재 상태를 나타내는 상태 객체에게 작업을 넘기게하는 방식의 작업이 필요함.