BACK_END

State 패턴

서울소시민 2018. 4. 25. 18:48

State 패턴

state 패턴은 너무 복잡하여 클래스의 메소드 호출 순서를 나열하려고 한다.


state 패턴은 말 그대로 '상태'를 표현 하는 패턴을 말한다. 이때 상태란 사물의 모양이나 형편을 의미한다. 상태를 클래스로 만듬으로 상태의 변화를 관리하고 새로운 상태를 추가할 수 있다. 그때 어떤 것을 프로그래밍 해야할지 명확해 질것이다.

책에는 금고관리 프로그램의 패턴에 대해 이이야기 하고 있다. 메소드 호출 순서는 다음과 같다.

  1. Main class에서 SafeFrame class의 setClock(hour) 메소드를 호출한다.

  2. SafeFrame class의 setClock 메소드는 현재시간을 출력하고, state인터페이스의 doClock(this, hour) 메소드를 실행한다.

  3. state 인터페이스는 DayState, NightState 클래스에서 각각 구현하고 있는데, 기본값은 DayState이므로 DayState의 doClock(Context context, int hour) 메소드를 실행한다.

  4. doClock(Context context, int hour) 메소드에는 처음 hour가 저녁이면 context.changeState(NightState.getInstance()) 함수를 호출시킨다. 즉, 저녁이면 NightState로 상태를 바꾸어 주는 것이다.

  5. Context.changeState(State state) 메소드는 다시 SafeFrame class에 있는데, 이 메소드가 호출되면 인자로 들어온 state의 값을 SafeFrame class의 프로퍼티인 state에 저장시켜준다.


    this.state = state;

    위의 과정으로 현재의 상태가 저장되었다. 다음은 SafeFrame class에서 구현된 사용자 화면에서 버튼 클릭과 같은 이벤트가 일어났을때 이다.

  6. 버튼이 클릭 되면 SafeFrame class의 actionPerformed(ActionEvent e) 메소드가 호출되는데, 그 이후 각 버튼에 맞게 알맞은 메소드가 호출된다. 메소드들은 모두 state인터페이스의 메소드들 이므로 DayState, NightState에 구현된 메소드를 살펴 보면된다.


'BACK_END' 카테고리의 다른 글

Observer  (0) 2018.05.09
Observer 패턴  (0) 2018.04.25
ec2-linux MariaDB 설치/제거 하기  (0) 2017.08.31