'전략(Strategy) 패턴'과 '상태(State) 패턴'의 차이점

구분 기준

  • 전략 패턴은 한 번 인스턴스를 생성하고 나면, 상태가 거의 바뀌지 않는 경우에 사용한다.
  • 상태 패턴은 한 번 인스턴스를 생성하고 난 뒤, 상태를 바꾸는 경우가 빈번한 경우에 사용한다.

전략(Strategy) 패턴 예시

  • 오리는 종류별로 수영을 할 수 있는 오리와 수영을 할 수 없는 오리, 날 수 있는 오리와 날 수 없는 오리, 꽉꽉하고 우는 오리와 꽥꽥하고 우는 오리 이렇게 나뉜다고 하자. 여기서 오리라는 인스턴스를 생성하게 되면, 오리의 종류가 살아가던 도중에 바뀌지 않는다. 즉, 상태가 바뀌지 않는 것이다. 오리라는 인스턴스가 생성될 때 가지는 기능들이 정해지게 된다.
  • DB에 연결을 시키려고 하는데, DB에 연결시키는 방법이 DirectConnection과 DBPoolConnection 2가지 방법이다. DB를 생성하는 인스턴스는 DB를 사용하던 도중에 DB의 연결 방법이 바뀌지 않는다. 즉, 인스턴스가 생성되고 나면 DB의 연결 방법에 관련된 상태가 바뀌는 것이 아니고, DB 인스턴스를 생성할 때 연결 방법을 정한 뒤에 DB 인스턴스가 만들어지게 된다.

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ea9a4728-2966-4f36-884d-8971568d6aa4/Untitled.png

상태(State) 패턴 예시

  • 엘리베이터라는 인스턴스를 생성했다고 가정하자. 엘리베이터의 상태는 정지, 하강, 상승의 상태를 가진다. 이런 각각의 상태에 따라서 엘리베이터가 가지고 있는 여러 행동(메소드)들[ex. 문열림 여부, 화살표 표시 모양, 이동 방향, 이동 속도 등]이 다르게 처리되야 한다.
  • 형광등이라는 인스턴스를 생성했다고 가정하자. 형광등의 OFF인 상태에서 스위치를 ON하면 불이 켜질 것이다. 그렇지만 ON인 상태에서 스위치를 ON하면 이미 불이 켜진 상태라 아무런 동작을 하지 않을 것이다. 정리하자면, ON인 상태에서나 OFF인 상태에서 각각 다르게 처리되야 한다.

References

디자인패턴 - 스트레티지 패턴(strategy pattern), 전략패턴이란?

디자인패턴 - 스테이트 패턴(State Pattern),상태 패턴