스테이트 State
🙊

스테이트 State

Created
Apr 26, 2024 04:55 AM
Last edited time
Last updated April 26, 2024
Tags
CS
Language
URL

Intro::

디자인 패턴 중 행위 패턴인 스테이트에 대해 알아봅시다.
 

스테이트 패턴이란?

💡
스테이트 패턴은 객체의 상태 변화에 따라 객체의 행동이 변경되도록 하는 디자인 패턴입니다. 즉, 객체의 내부 상태가 바뀜에 따라 객체의 행동이 다르게 작동할 수 있도록 합니다. 이 패턴을 사용하면 상태를 객체의 클래스로 캡슐화하고, 이를 통해 코드의 유지 보수를 용이하게 할 수 있습니다.
 

구성 요소

  1. Context (맥락): 사용자와 상호작용하는 주 객체로, 현재 상태를 유지하고 상태에 따라 행동이 변화합니다.
  1. State (상태): 여러 상태의 공통 인터페이스를 정의합니다. 각각의 구체적인 상태는 이 인터페이스를 구현합니다.
  1. ConcreteState (구체적인 상태): State 인터페이스를 구현한 클래스로, 특정 상태에 대한 행동을 정의합니다.
 

장점

  • 상태에 따른 행동의 변경을 로컬화하여 관리할 수 있어, 상태 변경에 따른 코드 수정을 최소화합니다.
  • 상태 추가가 용이하며, 기존 코드를 변경하지 않고 새로운 상태 클래스를 추가하기만 하면 됩니다.
  • 상태 패턴을 사용함으로써 복잡한 조건문 대신 객체 지향적인 방법으로 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.
 

단점

  • 상태가 많아질수록 관련 클래스도 늘어나, 시스템이 복잡해질 수 있습니다.
  • 각 상태가 하나의 클래스로 표현되므로, 상태가 많은 경우 많은 수의 클래스가 필요할 수 있습니다.
 

코드 예시

// State 인터페이스 interface FanState { void pull(Fan fan); } // ConcreteState 클래스: Off class Off implements FanState { public void pull(Fan fan) { System.out.println("Turning to speed 1"); fan.setState(new Speed1()); } } // ConcreteState 클래스: Speed1 class Speed1 implements FanState { public void pull(Fan fan) { System.out.println("Turning to speed 2"); fan.setState(new Speed2()); } } // ConcreteState 클래스: Speed2 class Speed2 implements FanState { public void pull(Fan fan) { System.out.println("Turning off"); fan.setState(new Off()); } } // Context 클래스: Fan class Fan { private FanState state; public Fan() { state = new Off(); // 초기 상태 설정 } public void pull() { state.pull(this); } public void setState(FanState state) { this.state = state; } } // 사용 예 public class Main { public static void main(String[] args) { Fan fan = new Fan(); fan.pull(); // Turning to speed 1 fan.pull(); // Turning to speed 2 fan.pull(); // Turning off } }
 

References::

Loading Comments...