25. 방문자 패턴(Visitor Pattern) 설계

25. 3 디자인

반복자 패턴의 예제로는 여행  일기와 사진을 통합 관리하는 응용을 가지고 보여 드릴게요..

응용에는 여행에서의 사진과 일기를 보관하는 컬렉션을 두려고 합니다. 일단 사진과 일기는 해당 컬렉션에 같이 보관할 수 있게 하기 위해 기반 클래스를 만들어야 겠지요. 그리고,해당 컬렉션에 특정 명령을 내렸을 때 사진이나 일기에 따라 구체적 행위가 다르게 적용해야 하는 기능들을 추상화 하여 방문자를 정의할 것입니다.

사진과 일기의 기반 클래스에서는 방문자를 수용할 수 있게 하고 방문자에서 자신을 처리할 수 있는 메서드를 호출하게 할께요. 대신 방문자에서는 일기와 사진과 같은 요소 형식들에 따라 처리하는 메서드를 약속하고 방문자를 기반으로 하는 형식에서는 목적에 맞게 구체적인 구현할 거예요.

이처럼 방문자 패턴으로 설계하면 컬렉션에 보관된 요소 형식에 따라 구체적인 처리가 다른 각 연산을 구체화 된 방문자 형식에 정의할 수 있을 것입니다. 결국 사진이나 일기 형식에서는 새로운 연산을 정의할 필요가 없게 되겠죠. 그리고 특정 연산이 잘못 동작할 때도 해당 기능을 정의한 하나의 형식만 살펴보면 되기 때문에 개발 비용을 줄일 수 있습니다.

대신 새로운 요소 형식이 추가되면 구체화 된 각 방문자 형식에 새로운 요소 형식을 처리하는 메서드를 구현해야 하기 때문에 생각하지 못한 비용이 발생될 수 있겠죠. 또한 방문자에서 요소 형식에서 처리해야 할 기능을 구현하기 때문에 요소 형식에서 노출할 필요가 없는 것들도 노출해야 하는 상황이 발생할 수 있습니다. 여러분들은 이와 같은 사항을 주의하셔서 방문자 패턴을 적용할 지를 결정할 수 있어야 할 것입니다.

방문자 패턴 클래스 다이어그램
[그림] 방문자 패턴 클래스 다이어그램