[ 목차 ]
안녕하세요, 프로그래밍을 사랑하는 여러분! 오늘은 언제나 유용한 Java 디자인 패턴 중 '상태(State) 패턴'에 대해서 알아봅시다. 간단하고 엔터테인이 있는 이 글을 읽으시다 보면 상태 패턴의 개념과 사용법이 익숙해질 거예요!
상태(State) 패턴에 대해서
상태 패턴이란 무엇인가요?
- 상태 패턴은 객체의 상태에 따라 행동을 변경할 수 있도록 하는 디자인 패턴입니다.
- 상태 변경에 따른 코드 분기(IF 문 등)를 제거하여 유연성과 확장성을 높입니다.
- 상태 프로토타입 인터페이스와 구체적인 상태 클래스가 필요합니다.
상태 패턴의 구성 요소
- State(상태): 인터페이스로 각 상태별 동작을 추상화합니다.
- ConcreteState(구체 상태): State 인터페이스를 구현한 클래스로 실제 각 상태에서 수행할 동작을 정의합니다.
- Context(콘텍스트): 상태(State)를 이용하여 행동을 실행하는 클래스입니다. 이 클래스에서 상태를 변경하기도 합니다.
상태 패턴의 구현
간단한 상태 패턴 구현 예제를 통해 이해를 돕고자 합니다. 빨간색 신호와 녹색 신호에 따라 차량이 정지하거나 진행하는 상황을 상태 패턴으로 구현해 봅시다.
- 상태 인터페이스(TrafficSignalState)와 구체 상태 클래스(RedSignal, GreenSignal)를 작성합니다.
public interface TrafficSignalState {
void change(TrafficSystem trafficSystem);
}
public class RedSignal implements TrafficSignalState {
@Override
public void change(TrafficSystem trafficSystem) {
System.out.println("Signal changed to RED");
trafficSystem.setTrafficSignalState(new GreenSignal());
}
}
public class GreenSignal implements TrafficSignalState {
@Override
public void change(TrafficSystem trafficSystem) {
System.out.println("Signal changed to GREEN");
trafficSystem.setTrafficSignalState(new RedSignal());
}
}
- 콘텍스트 클래스(TrafficSystem)와 메인 클래스(Main)를 작성하여 상태 패턴을 적용합니다.
public class TrafficSystem {
private TrafficSignalState trafficSignalState;
public TrafficSystem() {
trafficSignalState = new RedSignal();
}
public void setTrafficSignalState(TrafficSignalState trafficSignalState) {
this.trafficSignalState = trafficSignalState;
}
public void changeSignal() {
trafficSignalState.change(this);
}
}
public class Main {
public static void main(String[] args) {
TrafficSystem trafficSystem = new TrafficSystem();
// 변경되는 시스템의 적용 사례를 표현합니다.
for (int i = 0; i < 5; i++) {
trafficSystem.changeSignal();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
상태 패턴의 장단점
장점
- 상태 변화에 따른 코드 분기를 줄여 코드의 가독성과 유지 보수를 용이하게 합니다.
- 상태 클래스 간의 매우 낮은 결합도로 인하여 확장성이 좋습니다.
단점
- 상태가 증가할수록 관련 객체의 수가 증가하여 복잡성이 올라갈 수 있습니다.
Java 프로그래밍의 유용한 디자인 패턴 중 하나인 상태(State) 패턴에 대해서 알아보았습니다. 이 디자인 패턴은 객체의 상태에 따라 행동을 변경할 수 있도록 만들어줌으로써, 코딩을 더 간결하고 유연하게 만들 수 있습니다. 평소에 사용하시는 코드에 상태 패턴을 적용해 보시고 어떤 변화가 있는지 체감해 보시길 바랍니다. 다음 글에서는 또 다른 흥미로운 디자인 패턴을 소개드리겠습니다. 즐거운 프로그래밍되세요!
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴
2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴
2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴
2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴
2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법
'JAVA' 카테고리의 다른 글
JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
---|---|
JAVA 디자인패턴 -프로토타입(Prototype) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
JAVA 디자인패턴 - 컴포지트(Composite) 패턴 (0) | 2023.07.17 |
JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴 (0) | 2023.07.16 |
JAVA 디자인패턴 - 스트래티지(Strategy) 패턴 (0) | 2023.07.15 |
댓글