20. 메멘토 패턴(Memento Pattern)

20.1 개요

메멘토 패턴은 개체의 상태를 기록해 놓았다가 원래 상태로 복원을 할 필요가 있을 때 기록해 놓은 것을 사용하는 패턴입니다. 메멘토 패턴은 실행 취소 기능을 지원하고자 할 때 많이 사용합니다.

간단한 예를 들어볼께요. 어떠한 응용에서 특정 기능을 수행할 것을 요청하기 전에 원본 개체에게 메멘토 개체를 요청합니다. 원본 개체는 자신의 상태 정보에 대한 스냅샷인 메멘토 개체를 생성하여 반환합니다. 그리고, 특정 기능을 수행하다가 수행 이전 상태로 복원이 필요하게 되면 반환 받았던 메멘토 개체를 원본 개체에게 전달하여 복원할 것을 요청합니다. 원본 개체는 전달받은 메멘토 개체에 보관해 두었던 이전 상태 값을 얻어와서 자신의 상태를 복원을 하는 것입니다.

 “메멘토 패턴은 개체의 상태를 기록해 놓았다가 복원을 할 때 사용하는 패턴”

20. 2 시나리오

2주가 지나면 중간고사 기간이 시작됩니다. 제가 맡는 강의는 정규 과목이 아니라서 중간고사와 기말고사 기간에는 진행하지 않습니다. 보통 이 기간을 이용하여 장거리 여행을 가곤 하지요. 이번에는 추석이나 구정에만 방문하는 고향에 여행을 가기로 하였고 오늘 3시 비행기로 출발합니다.

제주도로 가는 비행기에서 혁재와 영상 처리에 대한 이런 저런 얘기를 주고 받았습니다. 혁재는 요즘 사진보정 응용을 제작하는 중이라고 하더군요.

“혁재야. 언제면 우리가 사용할 수 있을까?”

“아빠, 지금도 사용할 수는 있어요. 그런데, 보정 작업을 하다가 원상 복구를 하는 게 안 되고 있어서 사용하기 전에 원본을 복사한 후에 복사한 파일을 보정하고 있어요. 또 다시 보정을 하려면 다시 이러한 작업을 반복해야 하다 보니 사용하기는 좀 불편한 거 같아요.”

“음. 사람이 하는 그 작업과 비슷하게 응용이 대신 해 주면 편하겠구나. 지난 번에 준 [Escort GoF의 디자인 패턴] 책을 보면 메멘토 패턴에 대한 소개가 있을 거야. 한 번 살펴보렴.  문제 해결에 도움이 될거야.”

일주일 동안 고향 제주를 여행을 하는 마지막 날에 혁재의 프로그램을 사용해 볼 수 있었어요.