방문자(Visitor) 패턴
23기 시 종 진
1. 의 도
- 기능을 수행할 개체를 변경하지 않고도 새로운 기능을 정의 할 수 있습니다.
2. 장 점
- 어떠한 구조도 처리가 가능합니다. (객체의 구조나 환경을 알고리즘과 분리)
- 기능의 한계를 객체 내에 한정 짓지 않고 알고리즘을 새로 만들어 그것을 자신에게 방문하게 함으로써 유연성 증대.
3. 단 점
- 결합도가 증가 되어 방문자들이 예상치 못한 오류를 발생시킬 확률이 높아짐.
- Double_DisPatch를 해야 되므로 여기서 방문자들이 C++언어에서는 friend를 이용하므로 개체간의 캡슐화가 무너지는 단점이 있다.
4. 활 용
- 다른 인터페이스를 가진 클래스가 객체 구조에 포함되어 있으며, 구현된 클래스에 따라 달라진 연산을 이들 클래스의 객체에 대해 수행하고자 할 때 사용 할 수 있습니다.
- 같은 자료형의 여러 객체에 대해 수행할 작업이 다양하고 많을 때 사용 할 수 있습니다.
- 수행하고 싶은 작업의 종류가 계속해서 추가, 변경될 수 있는 상황일 때 사용 할 수 있습니다.
5 . 구 조

6. 구조 이해
- 방문자 패턴을 사용하는 개발자는 ConcreteVisitor 개체를 구현하고 개체 구조를 따라서 각 원소를 방문하며 순회해야 합니다.
- 방문자가 방문할 개체에 방문하면 해당 개체의 Visitor메소드를 호출하고 이 개체들은 자신을 Visitor연산을 하기 위해 필요한 매개변수로 넣어줘서 방문자 자신의 상태에 접근할 수 있도록 합니다.
7. 결 과
- 방문자 개체는 새로운 기능을 쉽게 추가 할 수 있습니다.
- 방문자를 통해 관련된 기능들을 한 군데로 모으고 관련되지 않은 기능을 분리 할 수 있습니다.
- 새로운 ConcreateElement들을 추가하기 어렵습니다.
- 개체 계층 구조에 걸쳐서 방문합니다.
- 데이터의 캡슐화를 깨버리게 됩니다.
8. 예제

9. 참고문헌
- GoF의 Design Pattern (개정판)
저자 : 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블라시디스
출판 : 피어슨 에듀케이션 코리아
파일 첨부
VisitorSample.zip
방문자기술문서.docx