리플렉션

Bong2·2022년 3월 19일
0

JAVA

목록 보기
13/16

리플렉션

구체적인 클래스 타입을 알지 못해서 그 클래스의 메소드와 타입 그리고 변수들을 접근할 수 있도록 해주는 자바 API

  • 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야되는 경우

  • 동적으로 객체를 생성하고 메서드를 호출하는 방법

  • 자바의 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다.

WHEN

코드를 작성하는 시점에는 어떤 타입의 클래스를 사용할지 모르지만 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우

프레임 워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공
ex) 스프링의 어노테이션이 리플렉션을 이용

가져올 수 있는 정보

  • CLASS
Class clazz = Child.class; 
clazz.getName(); //Child Class를 알고 있을 때

//클래스 이름만으로 클래스 정보를 가져온다
Class clazz2= Class.forName("Child");
clazz2.getName(); //Child
  • CONSTRUCTOR
Class clazz= Class.forName("Child");
Constructor cons=clazz.getDeclaredConstructor(); //생성자 가져오기
Constructor cons2=clazz.getDeclaredConstructor(param); //넣은 인자의 타입과 일치하는 생성자 가져오기
Constructor cons3[]=clazz.getDeclaredConstructors(); //모든 생성자 가져오기
  • METHOD
Class clazz= Class.forName("Child");
Method method1=clazz.getDeclaredMethod("method4",int.class);
// 메소드를 찾을 때 존재하지 않으면 NoSuchMethodException 에러 발생
  • FIELD
Class clazz= Class.forName("Child");
Field field = clazz.getDeclaredField("param"); //해당 필드 가져오기
Field fields[] = clazz.getDeclaredFields(); //모든 필드 가져오기
profile
자바 백엔드 개발자로 성장하자

0개의 댓글

관련 채용 정보