BOID

[디자인 패턴] 상태 패턴이란? (2/2) (Swift) 본문

디자인 패턴 (Swift)

[디자인 패턴] 상태 패턴이란? (2/2) (Swift)

HoonIOS 2023. 6. 18. 20:31
728x90

안녕하세요, HoonIOS입니다. :)

저번에는 간단하게 상태패턴에 대해 알아봤는데요, 이번에는 구조에 대해 알아보겠습니다.

 

상태패턴 구조

  1. 콘텍스트 
    - 상태에 대한 참조를 저장하고 모든 상태별 작업을 하는 곳
    - 상태 인터페이스를 통해 상테 객체와 통신하며 새로운 상태 객체를 전달하기 위한 setter을 호출
  2. 상태
    - 인터페이스로 상태별 메서드를 구현
    - 이 메서드는 모든 상태에 대해 유효한 메서드이어야 하는데 그 이유는 상태에 따라 호출될 일이 없는 메서드들를 인터페이스로 구분하면 사이드 이펙트가 나올 가능성이 있기 때문이다.
  3. 구상 상태
    - 상태별 클래스로 상태 인터페이스에 따른 메서드들을 자체적인 구현을 제공합니다.
    - 여러 상태에서 유사한 코드의 중복을 피하기 위해 어떤 공통 행동을 캡슐화하는 중간 추상 클래스들을 제공할수 있습니다.
    - 상태에 따른 객체들은 콘텍스트에 대해 역참조할수 있고 이 참조를 통해 상태는 콘텍스트 객체에서 필요한 정보를 가지고 올수 있습니다

 

언제 적용할까요?

  • 각 상태에 따라 다르게 행동하는 객체가 있고 상태가 많을때 사용하는게 좋고 상태별로 코드가 자주 변경될때 사용하면 좋아요,
    즉. 새로운 상태를 추가하거나 기존 상태들을 독립적으로 변경하는데 쉬워서 유지 관리하기도 좋습니다.
  • 하나의 값에 따라 클래스의 행동하는 방식을 변경하는 조건문 늪들이 있을떄 사용하는게 좋습니다.
  • 상태들에 따라 중복 코드 또는 조건문-기반 상태 머신의 천이가 많을때 사용하는게 좋습니다.
  • 거대한 상태 조건문들이 추가될려고 할때 해당 패턴을 적용하는게 좋습니다.

 

지금까지 상태패턴에 대해 알아봤는데요, 상태에 따라서 다르게 동작을 하도록 할때 적용하는게 좋을것 같습니다.

 

 

반응형
Comments