JAVA

JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점

TECH 톡마스터 2023. 7. 17.

[ 목차 ]

    JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점
    JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점

    안녕하세요, 프로그래밍을 사랑하는 여러분! 오늘은 언제나 유용한 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) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴

     

    JAVA 디자인패턴 - 옵저버(Observer) 패턴

    [ 목차 ] 안녕하세요. 이번에는 Java 디자인패턴 중 옵저버(Observer) 패턴에 대해서 알아보겠습니다. 1. 옵저버(Observer) 패턴이란? 옵저버 패턴은 디자인 패턴 중 하나로, 한 객체의 상태가 변화하면

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

     

    JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 데코레이터(Decorator) 패턴에 대해서 알아보겠습니다. 1. 데코레이터(Decorator) 패턴 이란? 데코레이터 패턴은 기존 객체에 동적으로 새로운 기능을

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴

     

    JAVA 디자인패턴 - 프록시(Proxy) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다. 1. 프록시(Proxy) 패턴 이란? 프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴

     

    JAVA 디자인 패턴 - 커맨드(Command) 패턴

    안녕하세요. 오늘 알아볼 JAVA 디자인 패턴은 커맨드(Command) 패턴입니다. 1. 커맨드(Command) 패턴 이란? 커맨드 패턴은 요청을 객체로 캡슐화하여 메서드 호출에 의한 연동을 개선하고, 호출 정보를

    tech.dj-tiger.com

    2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

     

    JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 스트래티지(Strategy) 패턴에 대해서 작성해 보겠습니다. 스트래티지(Strategy) 패턴 이란? 스트래티지 패턴은 알고리즘 군을 정의한 다음 각각을 캡슐

    tech.dj-tiger.com

    2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

     

    JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

    [ 목차 ] 안녕하세요. JAVA 디자인패턴 중 템플릿 메서드(Template Method) 패턴에 대해서 알아볼까요? 템플릿 메서드(Template Method) 패턴 이란? 템플릿 메서드 패턴은 알고리즘의 골격을 제공하고, 일부

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴

     

    JAVA 디자인패턴 - 컴포지트(Composite) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 컴포지트(Composite) 패턴입니다. 컴포지트(Composite) 패턴 이란? 컴포지트 패턴은 객체들의 조직을 트리 구조로 구성하여 전체-부분 계층을 표

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

     

    JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

    [ 목차 ] 안녕하세요, 프로그래밍 세계의 친구분들! 오늘은 자주 사용되는 자바 디자인 패턴 중 하나인 이터레이터(Iterator) 패턴에 대해 알아볼까요? 디자인 패턴이란 소프트웨어를 설계할 때 반

    tech.dj-tiger.com

     

    댓글

    💲 추천 글