정처기 감자
SW 설계디자인패턴

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

상태 state 패턴 - 타입스크립트 예시

SW설계디자인패턴
읽는데 4분 소요
처음 쓰여진 날: 2025-09-01
마지막 수정일: 2025-09-01
조회수: —
선수학습(1개)
  • 정보처리기사 실기를 위한 디자인 패턴 암기 방법

요약

상태 state 패턴을 타입스크립트 코드와 함께 알아봅니다.

상태 (State) 패턴 요약

패턴 종류핵심 키워드
상태 (State)객체의 내부 상태가 변경될 때, 객체의 행동 방식도 함께 변경, 상태 변경, 행동 변경
상태 패턴 감자
상태 패턴 감자

상태 (State) 패턴

상태 패턴은 객체의 내부 상태가 변경될 때, 객체의 행동 방식도 함께 변경되도록 하는 패턴입니다. 이 패턴을 사용하면, 객체는 마치 자신의 클래스가 바뀌는 것처럼 보입니다. if/else나 switch 문으로 가득 찬 상태 관리 코드를, 상태를 나타내는 각각의 클래스로 분리하여 훨씬 깔끔하게 만들 수 있습니다.

'신호등' 을 생각하면 쉽습니다. 신호등은 '초록불', '주황불', '빨간불'이라는 상태를 가집니다. 각 상태일 때 신호등의 행동(다음 상태로 변경되는 것)은 완전히 다릅니다. 초록불일 때는 주황불로, 주황불일 때는 빨간불로, 빨간불일 때는 초록불로 바뀝니다. 상태 패턴은 이처럼 상태에 따른 행동들을 별도의 클래스로 캡슐화하고, 상태가 변할 때 행동을 책임질 클래스 자체를 교체해버리는 방식입니다.

기본 구조

  • Context: 상태를 가지는 주체입니다. 현재 상태를 나타내는 State 객체에 대한 참조를 가집니다. 클라이언트의 요청을 받으면, 현재 State 객체에게 행동을 위임합니다. 또한, 상태 객체가 Context의 상태를 변경할 수 있도록 setState()와 같은 메서드를 제공합니다.
  • State: 모든 구체적인 상태 클래스들이 구현해야 할 공통 인터페이스입니다. Context가 위임할 행동들을 메서드로 정의합니다. (예: handle())
  • ConcreteState: State 인터페이스를 구현하는 구체적인 클래스입니다. 특정 상태일 때의 행동을 구현하며, 필요에 따라 Context의 다음 상태를 결정하고 변경합니다.

예시: 온라인 문서의 게시 워크플로우

'초안(Draft)' -> '검토 중(Moderation)' -> '게시됨(Published)' 상태를 가지는 온라인 문서 객체를 만들어 보겠습니다.

먼저, 모든 상태가 따라야 할 DocumentState 인터페이스를 정의합니다.

typescript
코드 하이라이팅 중…

다음으로, 상태를 가질 Context 객체인 Document 클래스를 만듭니다.

typescript
코드 하이라이팅 중…

이제 각 상태에 대한 행동을 정의하는 ConcreteState 클래스들을 만듭니다.

typescript
코드 하이라이팅 중…

클라이언트 코드는 Document 객체의 publish() 메서드만 호출하면 됩니다.

typescript
코드 하이라이팅 중…

Document 클래스 안에는 if (state === 'draft') { ... } else if (state === 'moderation') { ... } 와 같은 조건문이 전혀 없습니다. 모든 상태 관련 로직은 각각의 State 클래스에 위임되었습니다. 만약 '반려됨(Rejected)'이라는 새로운 상태가 필요하다면, RejectedState 클래스를 만들어 추가하기만 하면 되므로 '개방-폐쇄 원칙(OCP)'을 잘 따릅니다.

상태 패턴 중요 키워드

  • 상태에 따른 행동을 별도의 클래스로 캡슐화합니다.
  • 객체가 내부 상태에 따라 행동을 바꾸도록 합니다. (마치 클래스가 바뀌는 것처럼)
  • 복잡한 if/else 또는 switch 문으로 된 상태 머신 코드를 정리하는 데 매우 효과적입니다.
  • 상태 전환의 책임이 Context가 아닌 개별 State 클래스에 있어 규칙이 명확해집니다.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • 디자인 패턴 정보처리기사 기출 문제 모음

추천 개념

Beta

관련 글

(41개)
제목태그업데이트시험
추상 팩토리 abstract factory 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
빌더 builder 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
팩토리 메서드 factory method 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-11-03-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999