목차개요내용요약객체들에 적용되어야 할 연산을 정의한 후, 기존 클래스의 변경없이 새로운 연산을 할 수 있도록 하자.예시AST(abstract syntax tree)을 생성하는 컴파일러를 생각해봅시다. 이 컴파일러는 생성된 AST에 의미 분석을 해야합니다. 이를 위해 컴파일러는 타입 체크, 코드 최적화 등을 해야 합니다. 이를 위해 아래와 같은 클래스 구조를 생각해볼 수 있습니다.하지만 이런 방식을 채택하면 모든 연산들이 다양한 노드 클래스에 분산되어있어 시스템을 유지보수하고 변경하기 어려워집니다. 새로운 연산이 독립적인 클래스에 정의되고, 노드 클래스와 상관없이 된다면 유지보수하기 더 나을겁니다. 그렇게 하기 위해서 연관된 연산을 별도의 객체인 비지터로 빼내고 이를 노드에 넘겨주는 방식을 사용할 수 있..