TypeVisitor — 타입 방문자 인터페이스
TypeVisitor — 타입 방문자 인터페이스
TypeVisitor<R, P>는 방문자 디자인 패턴 스타일로 타입(type)을 방문하는 인터페이스예요. 이 인터페이스를 구현하는 클래스는 타입의 종류를 컴파일 시점에 알 수 없을 때 그 타입을 조작하는 데 쓰여요. 방문자가 타입의 accept 메서드에 전달되면 그 타입에 가장 적합한 visitXyz 메서드가 호출돼요.
R은 방문자 메서드의 반환 타입(결과가 필요 없으면 Void), P는 추가로 넘기는 매개변수의 타입(추가 매개변수가 필요 없으면 Void)이에요.
본문
선언은 다음과 같아요.
public interface TypeVisitor<R,P>
API 노트: 이 인터페이스에 미래 자바 언어 구조를 수용하기 위해 메서드가 추가될 수 있어요. 직접 구현한 방문자 클래스는 미래 플랫폼 버전과 소스 호환이 깨질 수 있으므로, 적절한 추상 방문자 클래스(AbstractTypeVisitor6~14 등)를 확장하는 게 좋아요. 다만 API는 매개변수·반환 타입으로 이 방문자 인터페이스를 쓰는 걸 권장해요.
주요 메서드는 다음과 같아요.
default R visit(TypeMirror t) // visit(t, null)과 동일
R visit(TypeMirror t, P p)
R visitArray(ArrayType t, P p) // 배열 타입
R visitDeclared(DeclaredType t, P p) // 클래스·인터페이스 타입
R visitError(ErrorType t, P p) // 오류 타입
R visitExecutable(ExecutableType t, P p) // 실행 가능 타입
R visitIntersection(IntersectionType t, P p) // 교차 타입
R visitNoType(NoType t, P p) // 의사 타입 (void, package 등)
R visitNull(NullType t, P p) // null 타입
R visitPrimitive(PrimitiveType t, P p) // 프리미티브 타입
R visitTypeVariable(TypeVariable t, P p) // 타입 변수
R visitUnion(UnionType t, P p) // 유니온 타입
R visitWildcard(WildcardType t, P p) // 와일드카드 타입
R visitUnknown(TypeMirror t, P p) // 알 수 없는 종류
각 visitXyz 메서드는 해당 종류의 타입을 방문할 때 호출돼요. visitUnknown은 방문자가 모르는 새 언어 구조를 만났을 때 호출돼요.