반응형
💋 인트로
이번 포스팅에서는, 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() 메서드는 내부 클래스가 없는 상황에서는 항상 동일한 값을 반환합니다.
내부 클래스가 없는 경우에는 클래스의 이름을 반환하기 때문입니다.
💋 참고자료
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
반응형
'JAVA' 카테고리의 다른 글
[JAVA] try-with-resources를 사용해서 리소스 누수를 방지하자! (0) | 2023.09.29 |
---|---|
[JAVA] Reflection API: 개념, 사용법, 예시 코드 (0) | 2023.09.28 |
[JAVA] 멀티 쓰레드의 동기화(synchronization): 메서드, 메서드 내 블록에 synchronized 키워드를 붙이자! (0) | 2023.09.10 |
[JAVA] 쓰레드 풀(Thread Pool): 개념, 장점, 사용 방법, 코드 예시 (feat. Baeldung) (0) | 2023.09.09 |
[JAVA] 프로세스와 스레드: 개념, Java의 쓰레드 구현, I/O Blocking (0) | 2023.09.08 |