JAVA
[JAVA] Java Reflection API에서 클래스 이름 가져오기: getName() vs getCanonicalName()
깃짱
2023. 9. 12. 23:00
반응형
💋 인트로
이번 포스팅에서는, Java Reflection API에서 클래스의 이름을 가져오기 위해 사용하는 두 메서드에 대해서 비교해서 알아봅시다!
💋 getName()
vs getCanonicalName()
getName()
메서드Class
객체의 이름을 반환합니다.- 클래스의 패키지 이름을 포함한 전체 경로
getCanonicalName()
메서드Class
객체의 정규화된 이름을 반환- 클래스의 패키지 이름을 포함하지만, 내부 클래스의 경우에는 $으로 구분하여 표기
💋 코드 예시
✔️ 실행 코드
public class ExampleClass {
public static void main(String[] args) {
// 클래스 객체 생성
Class<?> classObj = ExampleClass.InnerClass.class;
// getName() 메서드 사용
String name = classObj.getName();
System.out.println("getName() 결과: " + name);
// getCanonicalName() 메서드 사용
String canonicalName = classObj.getCanonicalName();
System.out.println("getCanonicalName() 결과: " + canonicalName);
}
// 내부 클래스 정의
static class InnerClass {
}
}
✔️ 실행 결과
위의 예시 코드에서 ExampleClass
는 외부 클래스이며, InnerClass
는 내부 클래스입니다.
getName()
메서드는 클래스의 이름을 반환합니다.
- 외부 클래스인
ExampleClass
의 경우getName()
은"com.example.ExampleClass"
를 반환합니다. - 내부 클래스인
InnerClass
의 경우getName()
은"com.example.ExampleClass$InnerClass"
를 반환합니다.
이 메서드는 클래스의 실제 경로를 반환하며, 내부 클래스의 경우 $ 기호를 사용하여 외부 클래스와 내부 클래스를 구분합니다.
getCanonicalName()
메서드는 클래스의 정규화된 이름을 반환합니다.
정규화된 이름은 패키지 이름을 포함하며, 내부 클래스의 경우 .을 사용하여 외부 클래스와 내부 클래스를 구분합니다.
- 외부 클래스인
ExampleClass
의 경우getCanonicalName()
은"com.example.ExampleClass"
를 반환합니다. - 내부 클래스인
InnerClass
의 경우getCanonicalName()
은"com.example.ExampleClass.InnerClass"
를 반환합니다.
💋 그렇다면, 두 값은 내부 클래스가 없는 상황에서는 언제나 동일할까?
네!
getName()과 getCanonicalName() 메서드는 내부 클래스가 없는 상황에서는 항상 동일한 값을 반환합니다.
내부 클래스가 없는 경우에는 클래스의 이름을 반환하기 때문입니다.
💋 참고자료
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
반응형