본문 바로가기
Java

Java State Pattern

by 무대포 개발자 2021. 4. 4.
728x90
반응형

0. 디자인 패턴은 무엇이고 왜 사용하는가?

  • 이러한 상황에서는 이런 패턴을 사용하라.
    • 이러한 상황에서 왜 이 패턴을 쓰는지 명확하게 알아야 한다.
  • 프로그램 구조 파악 용이, 의사소통 좋아질 수 있음.

1. State 패턴 개념

  • 객체 내부의 상태에 따라 객체의 동작 방식이 달라지는 패턴
  • 하나의 인터페이스를 두고 각 객체들은 이를 구현하여 상태에 따라 다른 행위를 하는 패턴
public interface NumState {
        void test();
}

public class OneState implements NumState (
        void test() {
                xxx
        }
)

public class TwoState implements NumState {
        void test() {

        }
}

public class Main {

        // OneState.test();

        // TwoState.test();
}

2. State 패턴 필요성/장점

  • 자바 패턴을 공부할 때는 개념이 있다는 것을 아는 것으로만 끝내서는 안됨. 항상 이게 왜 이상황에서 왜 이렇게 쓰는지를 알아야 함.
  • State 패턴의 특징을 한 마디로 정의하면 동일한 기능이 상태에 따라 달라지는 것.
  • 즉, interface 로 동일한 기능을 정의해놓고 상태 구현체만 변경해주면 내부 동작이 달라지는 곳에 쓰면 좋겠지.
  • 예를 들면, if 분기문을 태울 때, 다음과 같이 쓰면 좋을 것 같다.
    • 아래와 같이 인터페이스만 선언해두고 바깥에서 구현체만 변경해주면 확장성을 보장받을 수 있음.

public void statePatternTest(...) {

    NumState numState = xxx;
    numState.test();
}

 

3. State 패턴 단점

  • StatePattern 을 쓴다는 얘기는 객체를 만들어야 된다는 얘기고.
  • if, else vs StatePattern 중 어떤 것이 더 낫냐는 질문에 본인이 답할 수 있어야 함.
    • 간단한거고 확장이 별로 없다면 if, else 를 쓰고.
    • 복잡하고 확장성도 높을 것 같다면 StatePattern 을 쓰는 것이 좋을듯 하다.

댓글