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

메멘토 memento 패턴 - 타입스크립트 예시

SW설계디자인패턴
읽는데 9분 소요
처음 쓰인 날: 2025-09-01
마지막 수정일: 2025-10-29
조회수: —

요약

메멘토 memento 패턴을 타입스크립트 코드와 함께 알아봅니다.

메멘토 (Memento) 패턴 요약

패턴 종류핵심 키워드
메멘토 (Memento)객체의 내부 상태를 외부에 노출시키지 않음, 객체의 특정 시점 상태를 스냅샷처럼 저장, 필요할 때 다시 복원 가능
메멘토 패턴 감자
메멘토 패턴 감자

메멘토 (Memento) 패턴

메멘토 패턴은 객체의 내부 상태를 외부에 노출시키지 않으면서, 객체의 특정 시점 상태를 스냅샷처럼 저장해 두었다가 필요할 때 다시 복원할 수 있게 하는 패턴입니다. 이 패턴의 가장 중요한 목표는 캡슐화(Encapsulation)를 유지하는 것입니다.

'게임 저장(Save Game)' 🎮 기능을 생각하면 완벽합니다. 플레이어는 게임의 현재 상태(주인공의 위치, 레벨, 아이템 등)를 저장했다가, 나중에 그 시점부터 다시 시작하고 싶을 때 불러올 수 있습니다. 이때 게임의 복잡한 내부 데이터 구조가 외부에 직접 노출되지 않고, '세이브 파일'이라는 불투명한 객체(메멘토)를 통해 안전하게 상태가 저장되고 복원됩니다.

기본 구조

  • Originator: 자신의 상태를 저장하고 복원해야 하는 원본 객체입니다. save() 메서드를 통해 현재 상태를 담은 Memento 객체를 생성하고, restore() 메서드를 통해 Memento 객체로부터 자신의 상태를 복원합니다.
  • Memento: Originator의 내부 상태를 저장하는 객체입니다. Originator만이 메멘토의 모든 데이터에 접근할 수 있어야 하며, 다른 객체들(특히 Caretaker)은 메멘토의 내부를 들여다볼 수 없습니다.
  • Caretaker: Memento 객체를 보관하고 관리하는 역할을 합니다. 하지만 메멘토의 내용을 검사하거나 수정하지는 않습니다. 그저 Originator로부터 메멘토를 받아 저장해 두었다가, 나중에 Originator에게 다시 돌려줄 뿐입니다. (예: 실행 취소 내역을 관리하는 History 객체)

예시: 간단한 텍스트 편집기 만들기

글을 작성하고, 특정 시점의 내용을 저장(스냅샷)했다가 되돌리는(undo) 간단한 텍스트 편집기를 만들어 보겠습니다.

먼저, 편집기의 상태를 저장할 Memento 클래스를 정의합니다.

typescript
코드 하이라이팅 중…

다음으로, 상태를 저장하고 복원할 주체인 Originator, 즉 Editor 클래스를 만듭니다.

typescript
코드 하이라이팅 중…

마지막으로, 메멘토들을 관리할 Caretaker인 History 클래스를 만듭니다.

typescript
코드 하이라이팅 중…

History 객체는 EditorMemento 안에 content가 있는지조차 모릅니다. 그저 메멘토 객체를 스택에 넣고 빼는 역할만 충실히 수행합니다. 이 덕분에 Editor의 내부 상태(content)는 외부로부터 안전하게 보호되면서(캡슐화), 실행 취소와 같은 강력한 상태 관리 기능을 구현할 수 있습니다.

메멘토 패턴 중요 키워드

  • 캡슐화를 위반하지 않고 객체의 내부 상태를 외부에 저장합니다.
  • 스냅샷과 복원: 특정 시점의 상태를 저장하고, 나중에 그 상태로 되돌릴 수 있습니다.
  • 실행 취소(Undo/Redo), 트랜잭션, 상태 저장/불러오기 기능에 매우 유용합니다.
  • 역할 분리: 상태를 만드는 Originator, 상태를 저장하는 Memento, 상태를 관리하는 Caretaker로 역할이 명확히 나뉩니다.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(42개)
제목태그업데이트시험
디자인패턴 정보처리기사 실기 모의 시험
디자인패턴SW설계디자인패턴
2026-07-10응시
추상 팩토리 abstract factory 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2026-10-20-
빌더 builder 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
디자인패턴23개
제목태그업데이트시험
디자인패턴 정보처리기사 실기 모의 시험
디자인패턴SW설계디자인패턴
2026-07-10응시
추상 팩토리 abstract factory 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2026-10-20-
빌더 builder 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
팩토리 메서드 factory method 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-11-03-
프로토타입 prototype 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2026-10-20-
싱글톤 singleton 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
책임 연쇄 chain of responsibility 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-11-03-
커맨드 command 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-09-01-
인터프리터 interpreter 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-09-01-
이터레이터 iterator 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-09-01-
중재자 mediator 패턴 - 타입스크립트 예제
디자인패턴SW설계디자인패턴
2026-10-20-
옵저버 observer 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
상태 state 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-09-01-
전략 strategy 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
템플릿 메서드 template method 패턴 - 타입스크립트 예시
디자인패턴SW설계디자인패턴
2025-09-01-
방문자 Visitor 패턴 - 타입스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
어댑터 adapter 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-02-
브릿지 bridge 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
컴포지트 composite 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
데코레이터 decorator 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
퍼사드 facade 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
플라이웨이트 flyweight 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2025-09-01-
프록시 proxy 패턴 - 자바스크립트 예제
디자인패턴SW설계디자인패턴
2026-10-20-
SW설계19개
제목태그업데이트시험
릴리스 노트 작성 항목
제품 소프트웨어 패키징SW설계제품 소프트웨어 패키징
2026-06-26-
UI 정보처리기사 실기 모의 시험
UI/UXSW설계UI/UX
2026-05-04응시
애자일(Agile) 방법론
애자일SW설계방법론애자일
2026-10-01-
코딩 컨벤션과 표기법
코딩 스타일SW설계코딩 스타일
2026-10-01-
소프트웨어 비용 산정 기법
비용 산정SW설계비용 산정
2026-10-01-
비기능 요구사항
요구사항SW설계요구사항
2026-10-16-
리팩토링(Refactoring)
리팩토링SW설계리팩토링
2026-10-01-
UI 설계 원칙
UI/UXSW설계UI/UX
2026-10-01-
UI 종류 (CLI·GUI·NUI·OUI·VUI)
UI/UXSW설계UI/UX
2026-10-01-
SW 설계 왕감자 정보처리기사 실기 모의 시험
SW설계SW설계
2025-11-04응시
앱 설계(디자인패턴, 응집도-결합도,객체지향) 정보처리기사 실기 모의 시험
앱설계SW설계앱설계
2025-10-08응시
객체 지향 설계 원칙 - SOLID
객체지향SW설계앱설계객체지향
2026-10-20-
럼바우 객체 모델링 - 객(정)동기
객체지향SW설계앱설계객체지향
2026-10-20-
UML 정보처리기사 실기 모의 시험
UMLSW설계UML
2025-10-08응시
소프트웨어 아키텍처 4+1 뷰 모델
UMLSW설계UML
2025-09-26-
UML 클래스 다이어그램의 6가지 관계
UMLSW설계UML
2026-10-11-
UML 다이어그램
UMLSW설계UML
2026-10-20-
소프트웨어 모듈 응집도와 결합도
응집도/결합도SW설계앱설계응집도/결합도
2026-10-20-
정보처리기사 실기를 위한 디자인 패턴 암기 방법
앱설계SW설계앱설계
2026-10-16-

댓글

댓글을 불러오고 있어요
정처기 감자정처기 감자

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

실기 이론

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

시험 응시

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

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

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

감자 이용권

  • 이용권 구매

실기 이론

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

시험 응시

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

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 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