현재 상태를 나타내기 위해서 enum을 이용해서 정해진 state중 하나라는 것을 표시하고
현재 state를 참고해서 if 문을 통해 다른 동작을 취하게 하는 식으로 말이다.
이러한 요구사항에 대응한 가장 직관적인 코딩 구현 방법은
enum 과 if 문이다.
멤버 변수로 curState 같은 변수를 두고 if 문에서 curState에 따라 서로 다른 동작을 하게 한다.
이때의 단점은 if 문이 많이 쓰이게 됨으로 인해 수정이 귀찮고 어려워진다는 것이다.
state pattern은 다음과 같이 구현을 한다.
1. interface를 둬서 state 에 따른 동작메소드들을 다 선언해준다.
interface state {
method1();
method2();
}
class state1 implements state {
method1();
method2();
}
class state2 implements state {
method1();
method2();
}
curState의 메소드를 호출함으로써 if 문 분기 없이 state에 맞는 함수가 호출이 되도록 한다.
class OurProblem {
state curState;
state state1;
state state2;
public OurProblem() {
state1 = new state1();
state2 = new state2();
curState = state1;
}
public void method1() {
curState.method1();
}
public void method2() {
curState.method2();
}
}
enum + if 문으로 구현하기 전에 한번 더 생각해본다.
state 패턴을 쓸까 말까?
댓글 없음:
댓글 쓰기