Java 공부/Java 일반

Class로 클래스의 정보 얻어오기 (리플렉션)

모항 2022. 8. 8. 12:31

인프런에서 스프링 입문 강의를 듣다 보니 .class라는 것이 많이 나와서, 이것이 뭔지 간단하게 정리해두고자 한다.

 

 

리플렉션(1), Class 클래스

리플렉션(Reflection)은 객체를 통해 클래스의 정보를 분석해내는 프로그램 기법입니다. (사전적 의미 : 거울 등에 비친, 반사) 클래스 파일의 위치나 이름만 있으면 해당 클래스의 정보를 얻어내고

joont.tistory.com

이 블로그 글이 도움이 많이 되었다.

 

 

 

 

리플렉션이란

리플렉션은

어떤 객체를 가지고, 그 객체에 해당하는 클래스에 대한 정보를 알아내는 것이다.

 

클래스를 정의해놓은 코드를 찾아가지 않아도, 그 클래스를 바탕으로 생성된 한 객체의 이름만 알고 있으면

객체를 이용하여 클래스의 정보를 분석해낼 수 있다.

 

 

 

 

 

Class

자바에는 Class라는 이름의 클래스가 존재한다.

이놈 덕분에 리플렉션이 가능하다.

 

Class는 특정 클래스의 정보를 조회하는 다양한 메소드를 가지고 있다.

아래는 Class에 대한 자바 공식 문서이다.

 

Class (Java SE 11 & JDK 11 )

Determines if the specified Class object represents a primitive type. There are nine predefined Class objects to represent the eight primitive types and void. These are created by the Java Virtual Machine, and have the same names as the primitive types tha

docs.oracle.com

 

알다시피 클래스는 필드, 생성자, 메소드로 이루어지는데

Class 클래스는 필드, 생성자, 메소드의 정보를 반환하는 다양한 메소드를 가지고 있다.

어떤 필드가 있는지 알아오는 getField (반환값은 Field) 와 getFields (반환값은 Field[]) 등의 메소드,

어떤 생성자가 있는지 알아오는 getConstuctor와 getConstructors 등의 메소드,

어떤 메소드가 있는지 알아오는 getMethod와 getMethods 등의 메소드

그 외에도 다양한 메소드가 마련되어있다.

 

이러한 메소드들을 이용해 리플렉션을 한다.

리플렉션으로 알아온 정보를 가지고 새 객체를 만드는 것도 가능하다.

 

 

 

 

 

 

.class

(객체 이름).class 는

해당 객체의 클래스의 정보를 담은 Class 객체를 리턴한다.

 

예를 들어 문자열 객체 str이 있을 때

str.class 는

Class<String>을 반환한다.

 

내가 새로 정의한 객체 Apple이 있고 Apple apple1 이라는 객체가 있을 때

apple1.class 는

Class<Apple>을 반환한다.

 

그동안 스프링 강의에서 보였던

매개변수로 뭐뭐.class를 받는 메소드들은,

클래스에 대한 정보를 가져다 쓰는 메소드들이었던 것이다.