getClass() 메서드, Class 객체, Reflection 소개 - 1

"안녕, 아미고!"

"이제 메인 이벤트 시간입니다. Class 클래스에 대해 알아보고 Reflection에 대해 알아 보겠습니다.
이미 알고 있듯이 Java의 모든 것은 객체입니다. 그리고 객체에 필요한 것은 무엇입니까? 각 객체는 무엇을 정의합니까? 그게 다 뭐야?"

"수업!"

"맞아! 잘했어. 각 개체에는 클래스가 있습니다. 하지만 다시 개체로 돌아가서... 어떤 개체는 엔터티를 완전히 포함하고 다른 개체는 단순히 개체를 관리하는 데 도움을 줍니다."

"이 후자 유형에는 FileOutputStreamThread가 포함됩니다. Thread 객체를 생성할 때 새 스레드가 생성되지 않습니다. 스레드는 start() 메서드가 호출된 후 JVM(Java Virtual Machine)에 의해 생성됩니다. 이 객체는 단순히 프로세스를 관리하는 데 도움이 됩니다."

" FileOutputStream 과 동일합니다. 파일은 디스크에 저장되고 OS는 스토리지와 액세스를 관리합니다. 그러나 Java 가상 머신의 도움으로 File 객체를 통해 파일과 상호 작용할 수 있습니다."

"예, 이미 이해하고 있습니다."

"그래서 클래스와 상호 작용하기 위한 클래스라는 특수 클래스가 있습니다."

"추측하기 어렵지 않았습니다."

"예. JVM(Java Virtual Machine)이 새 클래스를 메모리에 로드할 때마다 로드된 클래스에 대한 특정 정보를 가져오는 데 사용할 수 있는 클래스 개체를 만듭니다."

"각 클래스와 개체는 « 클래스 개체 »와 연결됩니다."

설명
Class clazz = Integer.class;
Integer 클래스의 Class 개체를 가져옵니다.
Class clazz = int.class;
int 클래스의 Class 개체를 가져옵니다.
Class clazz = "123".getClass();
String 개체의 Class 개체를 가져옵니다.
Class clazz = new Object().getClass();
Object 개체의 Class 개체를 가져옵니다.

"와우! 정말 흥미롭군!"

" 클래스 라는 단어 는 Java의 키워드이며 변수 이름으로 사용할 수 없다는 것을 기억하십니까 ?"

"오 그래, 알아, 알아. 그냥 잊어버렸어."

"어딘가에서 이미 클래스 개체를 사용했습니까?"

"예, equals 메서드의 자체 구현을 작성할 때 사용했습니다."

"예, getClass() 메서드를 사용하여 객체가 동일한 클래스를 가지는지 테스트할 수 있습니다."

"그리고 이 물체로 무엇을 할 수 있습니까?"

"음, 많은 것들:"

자바 코드 설명
Class s = int.class;
String name = s.getName();
클래스 이름을 가져옵니다.
Class s = Class.forName("java.lang.String");
이름으로 클래스를 가져옵니다.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
개체의 클래스를 비교합니다.

"흥미롭긴 한데 생각만큼 멋지진 않네."

"멋지고 싶습니까? Reflection 도 있습니다 .  Reflection은 매우 멋집니다."

" 반사가 뭔데 ?"

" 리플렉션 은 클래스가 자신에 대한 정보를 얻을 수 있는 능력입니다. Java에는  클래스의 Class 클래스 와 유사한 특수 클래스인 FieldMethod가 있습니다. Class 개체를 통해 클래스에 대한 정보를 얻을 수 있는 것처럼 Field 개체는 필드에 대한 정보를 제공합니다. , Method 개체는 메서드에 대한 정보를 제공합니다. 그리고 이를 사용하여 무엇을 할 수 있는지 살펴보십시오."

자바 코드 설명
Class[] interfaces = List.class.getInterfaces();
List 클래스의 인터페이스에 대한 Class 객체 목록을 가져옵니다.
Class parent = String.class.getSuperclass();
String 클래스의 상위 클래스의 Class 객체를 가져옵니다.
Method[] methods = List.class.getMethods();
List 클래스의 메서드 목록을 가져옵니다.
String s = String.class.newInstance();
새 문자열을 만듭니다.
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
String 클래스의 길이 메서드를 가져오고 String s에서 호출합니다.

"와우! 정말 멋져요!"