디자인 패턴 - State(상태패턴)

jodbsgh·2022년 6월 12일
0

🎨"디자인 패턴"

목록 보기
3/4

😀State패턴이란

객체가 특정 상태에 따라 행위를 달리 하는 상황에서,
자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고,
상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴이다.

Tv 전원버튼을 예로들면
꺼져있는 상태에서 누르면 켜지고,
켜져있는 상태에서 누르면 꺼지듯이

그 상태마다 실행시 할 일과 함께 하나하나 모듈화해서 지정해둘 때 쓰인다.

🧐State을 사용하는 이유

  1. 하나의 객체에 대한 여러 동작을 구현해야할 때 상태 객체만 수정하므로 동작의 추가, 삭제수정이 간단해진다.
  2. State 패턴을 사용하면 객체의 상태에 따른 조건문(if/else,switch)이 줄어들어 코드가 간결해지고 가독성이 올라간다.

🤔State의 문제점

  1. 상태에 따른 조건문을 대신한 상태 객체가 증가하여 관리해야할 클래스의 수가 증가한다.

🎨State 구현

package state;

public class MyProgram{
	public static void main(final String[] args)
    {
    	final ModeSwtich modeSwitch = new ModeSwitch();
        
        ModeSwitch.onSwitch();			//"FROM LIGHT TO DARK" 출력
        ModeSwitch.onSwitch();			//"FROM DARK TO LIGHT" 출력
        ModeSwitch.onSwitch();			//"FROM LIGHT TO DARK" 출력
        ModeSwitch.onSwitch();			//"FROM DARK TO LIGHT" 출력
    }
}
package state;

public class ModeSwitch{
	private ModeState modeState = new ModeStateLight();
    
    public void setState (ModeState _modeState)
    {
    	modeState = _modeState;
    }
    
    public void onSwitch()
    {
    	modeState.toggle(this);
    }
}
package state;

public interface ModeState{
	public void toggle (ModeSwitch modeSwitch);
}

  class ModeStateLight implements ModeState {
      public void toggle (ModeSwitch modeSwitch)
      {
          System.out.println("FROM LIGHT TO DARK");	//어둡게


          modeSwitch.setState ( new ModeStateDark());
      }
  }
  
  class ModeStateDark implements ModeState {
	public void toggle (ModeSwitch modeSwitch)
    {
    	System.out.println("FROM DARK TO LIGHT");	//밝게
        
        
        modeSwitch.setState ( new ModeStateLIGHT());
    }
}

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글