디자인 패턴/행위 패턴
Visitor 패턴
언린이
2021. 10. 23. 09:07
Visitor 패턴은 실제 로직을 가지고 있는 객체가 로직을 적용할 객체를 방문하면서 실행하는 패턴입니다. 즉, 로직과 구조를 분리하는 패턴이라고 볼 수 있습니다.
구조
- Visitor
- 방문자 클래스의 인터페이스입니다.
- visit(Element) 메서드를 공용 인터페이스로 사용합니다. 여기서 Element는 방문 공간을 의미합니다.
- Element
- 방문 공간 클래스의 인터페이스입니다.
- accept(Visitor) 메서드를 공용 인터페이스로 사용합니다. 여기서 Visitor는 방문자를 의미합니다.
- 내부적으로 Visitor.visit(this)를 호출합니다.
- ConcreteVisitor
- Visitor를 구체적으로 구현한 클래스입니다.
- ConcreteElement
- Element를 구체적으로 구현한 클래스입니다.
활용 상황
- 자료 구조(데이터)와 자료 구조를 처리하는 로직(알고리즘)을 분리해야 할때 유용합니다.
- 데이터 구조보다 알고리즘이 더 자주 바뀔때 유용합니다.
Visitor 패턴의 장단점
- 장점
- 작업 대상(방문 공간)과 작업 항목(방문 공간에서 하는 일)을 분리시킬 수 있습니다.
- 작업 대상(방문 공간)은 단지 데이터를 가지고 있는 자료구조로 만들고, 작업 주체(방문자)는 visit() 메서드에서 작업 대상을 입력받아 작업 항목을 처리하면 됩니다.
- 즉, 데이터와 알고리즘이 분리되어 데이터의 독립성을 높여줍니다.
- 작업 대상의 입장에서는 accept()로 인터페이스를 통일시키기 때문에 사용자에게 동일한 인터페이스를 제공할 수 있습니다.
- 작업 대상(방문 공간)과 작업 항목(방문 공간에서 하는 일)을 분리시킬 수 있습니다.
- 단점
- 새로운 작업 대상(방문 공간)이 추가될때마다 작업 주체(방문자)도 이에 대한 로직을 추가해야 합니다.
- 두 객체(방문자와 방문 공간)의 결합도가 높아집니다.