ParameterNameProvider
ParameterNameProvider (매개변수 이름 제공자)
클래스파일 같은 신뢰할 만한 출처에서 매개변수 이름을 알아낼 수 없을 때, 그 이름을 추론해서 제공하는 인터페이스입니다. javac에서 메서드 매개변수에 사용자 친화적인 이름을 붙여 주는 역할을 해요.
본문
컴파일된 클래스파일에는 보통 매개변수 이름이 남지 않기 때문에, 소스가 없이 클래스파일만으로는 매개변수의 원래 이름을 알 수 없는 경우가 많습니다. 예를 들어 바이트코드에 -parameters 옵션 없이 컴파일된 메서드를 리플렉션하거나 처리할 때, 매개변수에 arg0, arg1 같은 임의의 이름밖에 남지 않아요. 이런 상황에서 ParameterNameProvider의 getParameterName()을 구현해 두면, javac가 신뢰할 만한 이름을 찾지 못했을 때 그때그때 적절한 이름을 추론해 쓸 수 있습니다.
구현 시에는 같은 소유 메서드 안에서 매개변수 이름이 서로 구분되도록 추론해야 해요. 이름이 겹치면 매개변수들을 혼동하게 되니까요.
메서드
getParameterName(VariableElement parameter)— 주어진 매개변수의 이름을 추론해 반환해요. 만약 구현이null을 반환하면 javac가 자동으로 합성한 이름을 대신 사용합니다.
이 인터페이스는 JavacTask.setParameterNameProvider(...)로 연결되며, 제공자가 없거나 null을 반환하면 VariableElement.getSimpleName()이 자동 생성한 이름을 돌려줘요.
이 기능은 소스 파일 없이 클래스파일만으로 작업하는 도구, 예를 들어 디버거나 리플렉션 기반 프레임워크에서 특히 유용합니다. 매개변수에 의미 있는 이름을 붙여 주면 진단 메시지나 도구 출력이 훨씬 읽기 쉬워지기 때문이에요.
제공자는 이름을 추론할 때 메서드 오버로드와 매개변수 순서 등도 고려해 구분되도록 만드는 것이 좋습니다. 무난한 규칙으로는 타입 이름이나 관례적인 축약어를 조합하는 방법이 흔히 쓰여요.