리플렉션 (Reflection) 이란?

방지환·2024년 7월 16일

Java

목록 보기
9/19

Reflection

  • 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
  • 컴파일 시간이 아닌 실행 시간(런타임 시점)에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법

정보

  • Class
    • Object.getClass()
    • .class 리터럴
    • Class.forName()
  • Constructor
    • getConstructor
    • 매개변수 타임을 지정해주지 않으면 기본생성자 호출
    • 생성자를 찾지 못한다면 NoSuchMethodException발생
  • Method
    • getMethod() 를 호출할때 인자로 생성자의 매개변수 타입을 바인딩
    • 매개변수가 없는 메소드라면 메소드 명만 입력
    • invoke()를 호출하여 메소드 실행
  • Filed
    • getField를 통해 클래스 필드 가져옴
    • getField를 통해 클래스 필드 가져옴
    • 필드값 변경은 set()

get, getDeclare

  • get 접근제어자가 public인 것만 가져온다.
  • getDeclare 접근제어자에 상관없이 모든것을 가져온다.

단점

  • 보통 메소드를 호출하면 컴파일 시점에 분석하지만 리플렉션은 런타임단계에서 분석하므로 속도가 느리다.
  • 타입 체크가 컴파일 타임에 불가능
  • 객체의 추상화가 깨진다.
    사용자가 실행할 때 발생하는 런타임 오류임으로 필요한 곳에서 한정적으로 사용하는게 좋다.

0개의 댓글