디자인 패턴/행위 패턴

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()로 인터페이스를 통일시키기 때문에 사용자에게 동일한 인터페이스를 제공할 수 있습니다.
  • 단점
    • 새로운 작업 대상(방문 공간)이 추가될때마다 작업 주체(방문자)도 이에 대한 로직을 추가해야 합니다.
    • 두 객체(방문자와 방문 공간)의 결합도가 높아집니다.

'디자인 패턴 > 행위 패턴' 카테고리의 다른 글

Chain of responsibility 패턴  (0) 2021.10.29
Iterator 패턴  (0) 2021.10.26
Observer 패턴  (0) 2021.10.19
Command 패턴  (0) 2021.10.16
State 패턴  (0) 2021.10.12