인프런에서 스프링 입문 강의를 듣다 보니 .class라는 것이 많이 나와서, 이것이 뭔지 간단하게 정리해두고자 한다.
이 블로그 글이 도움이 많이 되었다.
리플렉션이란
리플렉션은
어떤 객체를 가지고, 그 객체에 해당하는 클래스에 대한 정보를 알아내는 것이다.
클래스를 정의해놓은 코드를 찾아가지 않아도, 그 클래스를 바탕으로 생성된 한 객체의 이름만 알고 있으면
객체를 이용하여 클래스의 정보를 분석해낼 수 있다.
Class
자바에는 Class라는 이름의 클래스가 존재한다.
이놈 덕분에 리플렉션이 가능하다.
Class는 특정 클래스의 정보를 조회하는 다양한 메소드를 가지고 있다.
아래는 Class에 대한 자바 공식 문서이다.
알다시피 클래스는 필드, 생성자, 메소드로 이루어지는데
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를 받는 메소드들은,
클래스에 대한 정보를 가져다 쓰는 메소드들이었던 것이다.
'Java 공부 > Java 일반' 카테고리의 다른 글
입력값의 제공 횟수가 정해져있지 않을 때의 해결법 (백준 기준) (0) | 2023.09.05 |
---|---|
람다식 (Lamda Expression) (0) | 2022.07.28 |
자바에서 1차원 배열을 활용한 우선순위 큐 구현하기 (0) | 2022.07.19 |
자바에서 문자열의 형식을 설정하기 : String.format() (0) | 2022.03.29 |
String을 char[]로 바꾸어주는 toCharArray() (0) | 2022.02.22 |