20. 메멘토 패턴(Memento Pattern) 구현

20.4 구현

메멘토 패턴에 대한 예제 프로그램을 구현하는 순서는 Snapshot, Picture, App와 데모 코드 순으로 하겠습니다.

 

20.4.1 Snapshot

Snapshot 형식에서는 사진의 색조, 명도, 채도 정보를 얻어오는 속성을 노출하고 설정하는 속성은 은폐할 것입니다. 설정하는 속성을 은폐하는 이유는 신뢰성을 높이기 위해 다른 형식 개체에서 이들에 대한 값을 변경하지 못하도록 하기 위해서 입니다.

 ▶ Snapshot.cs

 

20.4.2 Picture

Picture 형식에서는 사진의 색조, 명도, 채도 정보를 변경하거나 상태 정보를 볼 수 있게 합시다. 그리고, 자신의 상태 정보에 대한 Snapshot 개체를 생성을 해 주는 메서드와 Snapshot 개체에 보관된 정보로 자신의 상태 정보를 변경하는 메서드를 제공하세요.

Picture에서 Snapshot 개체를 사용하지 않고 색조나 명도, 채도 정보를 얻어오고 설정하는 속성을 제공을 한다면 사용하는 곳에서 잘못된 사용을 할 수도 있습니다. 하지만, Picture 개체를 통해 자신의 상태와 동일한 상태 값을 갖는 Snapshot 개체를 만들어주고 이를 통해 자신의 속성을 변경하게 함으로써 잘못된 사용을 막을 수 있습니다.

 ▶ Picture.cs

20.4.3 App

App 클래스에서는 설정된 사진에 대해 어떠한 작업을 시작할 때 사진의 Snapshot을 보관해 두고 작업이 취소되면 보관해 두었던 Snapshot으로 복원을 하고 작업이 정상적으로 종료되면 Snapshot을 버리게 할 것입니다.

그리고 데모 코드에서는 두 개의 사진 개체를 생성하여 하나는 응용을 통해 정보를 변경을 하다 취소를 요청하여 복원한다는 것을 보여주고 하나는 정보를 변경하여 작업 완료를 하는 것을 보여주려고 합니다.

 ▶ App.cs

▶ Program.cs

▶ 실행 결과