Programing/javascript

자바스크립트 State Pattern

2025. 4. 19. 09:22
반응형

State Pattern(상태 패턴) 은 객체의 내부 상태에 따라 행동을 변경할 수 있게 만드는 행동 디자인 패턴입니다. 마치 객체의 클래스가 바뀌는 것처럼 동작을 전환할 수 있어, 복잡한 조건문 대신 명확한 상태 기반 구조를 설계할 수 있습니다.


🧱 State Pattern이란?

State Pattern은 상태를 별도의 객체로 추출하고, Context 객체가 상태 객체에 행동을 위임하는 구조입니다. 각 상태는 고유한 동작을 가지며, 상태 간 전환도 명확히 정의됩니다.

// 상태 클래스들
class RedLight {
    change(light) {
        console.log("빨간 불 → 초록 불");
        light.setState(new GreenLight());
    }
}

class GreenLight {
    change(light) {
        console.log("초록 불 → 노란 불");
        light.setState(new YellowLight());
    }
}

class YellowLight {
    change(light) {
        console.log("노란 불 → 빨간 불");
        light.setState(new RedLight());
    }
}

// Context 클래스
class TrafficLight {
    constructor() {
        this.state = new RedLight();
    }
    setState(state) {
        this.state = state;
    }
    change() {
        this.state.change(this);
    }
}

const light = new TrafficLight();
light.change(); // 빨간 불 → 초록 불
light.change(); // 초록 불 → 노란 불
light.change(); // 노란 불 → 빨간 불

✅ 장점

  1. 조건문 제거: 복잡한 if/else나 switch 문 대신 명확한 상태 클래스로 구조화
  2. 유지보수 용이: 각 상태가 별도 클래스로 분리되어 수정이 쉬움
  3. 확장성 증가: 새로운 상태 추가 시 기존 코드 수정 없이 확장 가능

❌ 단점

  1. 클래스 수 증가: 상태마다 별도 클래스를 만들어야 함
  2. 간단한 경우에는 과한 구조: 상태 전환이 단순할 경우 오히려 복잡함
  3. 상태 간 전환 로직이 분산되어 파악이 어려울 수 있음

🛠️ 실전 예시: 사용자 인증 상태 관리

class Guest {
    access(app) {
        console.log("게스트는 제한된 기능만 사용 가능합니다.");
        app.setState(new User());
    }
}

class User {
    access(app) {
        console.log("일반 유저 기능 사용 중...");
        app.setState(new Admin());
    }
}

class Admin {
    access(app) {
        console.log("관리자 권한으로 접근합니다.");
        app.setState(new Guest());
    }
}

class AppContext {
    constructor() {
        this.state = new Guest();
    }
    setState(state) {
        this.state = state;
    }
    access() {
        this.state.access(this);
    }
}

const app = new AppContext();
app.access(); // Guest → User
app.access(); // User → Admin
app.access(); // Admin → Guest

🧩 결론

State Pattern은 객체의 행동이 상태에 따라 달라지는 시나리오에서 조건문을 제거하고 코드 구조를 명확히 정리할 수 있는 효과적인 패턴입니다. 사용자 인증, UI 상태 전환, 게임 캐릭터 상태 등 다양한 상황에서 활용 가능하며, 유지보수성과 확장성이 중요한 프로젝트에 강력한 솔루션이 됩니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 Bridge Pattern  (0) 2025.04.19
자바스크립트 Composite Pattern  (0) 2025.04.19
자바스크립트 Chain of Responsibility Pattern  (0) 2025.04.19
자바스크립트 Iterator Pattern  (0) 2025.04.19
자바스크립트 Strategy Pattern  (0) 2025.04.19
자바스크립트 Command Pattern  (0) 2025.04.19
자바스크립트 Mediator Pattern  (0) 2025.04.19
자바스크립트 Observer Pattern  (0) 2025.04.19
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 Chain of Responsibility Pattern
  • 자바스크립트 Iterator Pattern
  • 자바스크립트 Strategy Pattern
  • 자바스크립트 Command Pattern
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바스크립트
    사고 싶은 책
    위시리스트
    기초
    It
    js패턴
    디자인패턴
    SQL
    Java
    php
    IT블로그
    블로그
    자바스크립트유틸
    JavaScript
    jsp
    IT·컴퓨터
    자바
    iT's MY LiFE
    IT 관련
    읽고 싶은 책
Dongkkase
자바스크립트 State Pattern
상단으로

티스토리툴바