AbstractTypeVisitor7 — 타입 방문자의 뼈대 클래스
AbstractTypeVisitor7 — 타입 방문자의 뼈대 클래스 (RELEASE_7)
프로그램의 타입(type)을 순회하며 각 타입에 알맞은 처리를 하고 싶을 때가 있어요. 그런데 매번 모든 방문 메서드를 처음부터 구현하려면 코드가 지저분해지기 마련이에요. AbstractTypeVisitor7은 이런 상황을 위해 만들어 둔 뼈대(skeletal) 타입 방문자예요. RELEASE_7 소스 버전에 맞는 기본 동작을 갖추고 있어서, 필요한 부분만 골라 오버라이드해서 쓰면 돼요.
이 클래스는 타입 방문자(TypeVisitor)의 기본 구현을 제공해요. 각 방문 메서드가 기본적으로 특정 타입 종류에 적합한 처리를 돌려주는데, 그 기본 처리를 바꾸고 싶은 메서드만 재정의하면 되죠. 언뜻 비슷한 이름의 클래스가 많아서 헷갈릴 수 있는데, 뒤에 붙는 숫자(7, 8, 9, 14)가 그 클래스가 기준으로 삼는 소스 버전을 나타내요.
본문
클래스 선언은 다음과 같아요. 두 개의 타입 파라미터를 받는데, R은 방문 메서드의 반환 타입, P는 방문 메서드에 넘겨주는 추가 파라미터 타입이에요.
public abstract class AbstractTypeVisitor7<R,P>
extends Object
implements TypeVisitor<R,P>
R— 방문 메서드가 반환하는 값의 타입이에요. 아무 값도 반환하지 않게 하려면Void를 쓰면 돼요.P— 방문 메서드에 추가로 전달되는 파라미터의 타입이에요.
이 클래스는 RELEASE_7 및 그 이전 언어 구조에 해당하는 타입의 방문 메서드를 구현하고 있어요. RELEASE_8 이후에 도입된 언어 구조는 방문할 수 없는 경우 visitUnknown을 호출해요. 즉, 이 클래스만으로는 자바 8 이후에 추가된 타입 형태를 기본적으로 방문할 수 없어요. 그래서 더 새로운 버전의 방문자가 필요한 상황에서는 AbstractTypeVisitor8이나 AbstractTypeVisitor9 같은 후속 클래스를 사용하게 돼요.
방문 메서드를 직접 호출할 수도 있지만, 이 클래스의 가장 큰 가치는 확장점이에요. 하위 클래스에서 필요한 메서드만 오버라이드하면, 나머지 타입들은 기본 동작을 그대로 따르게 되니까 굳이 전부 구현할 필요가 없어요. 전형적인 사용 패턴은 방문자 클래스를 상속받아 관심 있는 타입만 골라 처리하는 형태예요.
이 클래스는 javax.lang.model.util 패키지에 속해 있고, 소스 버전에 따라 같은 이름의 형제 클래스가 여럿 존재해요. 각각이 기준으로 하는 자바 에디션만 다를 뿐 기본적인 쓰임새는 동일해요.