Reflection?

yeezze·2022년 7월 14일
0

Java

목록 보기
3/3

개념

구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 기본 API
사용방법만 알면 라이브러리를 추가할 필요 없이 사용할 수 있다.

컴파일 시간이 아니라 실행 시간에 동적으로 특정 클래스의 정보를 객체화하여 분석 및 추출해낼 수 있는 프로그래밍 기법

  • 코드를 작성할 시점에는 어떤 타입의 클래스를 사용할지 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우
  • 동적으로 객체를 생성하고 메서드를 호출하는 방법
  • 자바의 리플렉션은 클래스, 인터페이스, 메소드, 필드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다.

프레임워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공한다. intelliJ의 자동완성 기능, 스프링의 어노테이션이 리플렉션을 이용한 기능이다.

Reflection 사용 실습

  • Person class 생성
  • main 메소드

  • 결과

결론

코드 쳐보면서 느낀건 lombok @Getter, @Setter 어노테이션도 reflection을 활용해서 만들 수 있겠다고 생각이 들었다..!💡 그리고 private 변수도 접근이 그냥 가능하다는게 신기했다. 기껏 접근 못하게 막아놨는데 reflection을 사용해서 접근이 가능한거잖아....? 찾아보니 이러한 점때문에 무분별하게 reflection을 사용하는 것은 좋지 않다고 한다. 되도록이면 사용하지말자. 이러한 것이 있다는 것을 아는게 목표였으니 그럼 됐다!

출처

https://velog.io/@yeon/Reflection이란
https://codechacha.com/ko/reflection/
https://madplay.github.io/post/java-reflection

profile
백엔드 개발자 😊

0개의 댓글