메멘토 패턴

임현규·2022년 12월 2일
0

메멘토 패턴 UML

care taker : 메멘토를 관리하는 객체(보통 Client)가 된다.
originator : 메멘토를 생성하는 객체 (본인의 상태를 복사해서 넘겨준다)
memento : originator에서만 접근 가능하고 originator 상태의 snapshot 형태이다.

Feature

  • 메멘토 생성의 책임은 순간 상태를 복사해서 저장하려는 객체가 가진다. 그 외에 누구도 객체 생성에 관여할 수 없다.
  • 상태를 가진 객체는 메멘토를 생성하거나 적용해서 상태를 적용할 수 있을 뿐 메멘토 자체를 관리하지는 않는다.
  • Care Taker는 클라이언트로 메멘토를 요청해서 관리한다.

예제

우아한 테크코스 racing car 예제의 일부분이다.

요구사항

  1. List 형태로 차의 이름을 입력받으면 차를 생성한다.
  2. 시도 횟수를 받으면 Simulation을 실행한다. 이 때 모든 차들의 시뮬레이션 과정을 출력한다.
  3. 차 객체는 name과 position을 가진다.

2번의 차들의 시뮬레이션 과정은 순간 상태를 snapshot 형태로 출력해야하므로 이 부분을 메멘토 패턴을 활용해본다.

객체 협력 관계

  1. 차에서 시뮬레이터에게 시뮬레이션을 요청한다. 이때 시뮬레이터는 시뮬레이션을 실행하면 상태가 변한다.
  2. CarService는 Simulator에게 simulation을 요청하고 그 이후 memento를 요청한다. 그러면 simulation은 차의 정보에 대한 메멘토를 생성하고 CarService에게 돌려준다.
  3. CarService는 History에게 스냅샷 상태를 저장할 것을 요청한다.

여기서 Simulator는 Originator, Car service 는 careTaker, Car snapshot은 memento가 된다.

소스코드

https://github.com/E1psycongr00/memento_pattern

profile
엘 프사이 콩그루

0개의 댓글