-
Reflection 리플렉션Java/기본 2018. 1. 21. 23:46728x90반응형
토비의 스프링 3.1 Vol.1 6장을 읽다가 리플렉션에 대해 설명이 나왔는데 쉽게 잘 설명이 되있다. 그래서 책의 내용을 읽고 정리해보았다.
위키에 리플렉션에 대한 정의는 다음과 같다.
반영(Reflection)은 컴퓨터 프로그램에서 런타임 시점에 사용되는 자신의 구조와 행위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미한다. “type introspection”은 객체 지향 프로그램언어에서 런타임에 객체의 형(type)을 결정할 수 있는 능력을 의미한다.
위의 설명만으로는 잘 와닿지 않는다. 아래는 책의 설명이다.
자바의 모든 클래스는 그 클래스 자체의 구성정보를 담은 Class 타입의 오브젝트를 하나씩 갖고 있다. '클래스이름'.class'라고 하거나 오브젝트의 getClass() 메소드를 호출하면 클래스 정보를 담은 Class 타입의 오브젝트를 가져올 수 있다.
이렇게 가져온 Class 타입의 오브젝트를 가지고 할 수 있는 것
클래스의 이름이 무엇이고, 어떤 클래스를 상속하고, 어떤 인터페이스를 구현했는지, 어떤 필드를 갖고 있고, 각각의 타입은 무엇인지, 메소드를 어떤 것을 정의했고, 메소드의 파라미터와 리턴 타입은 무엇인지 알아낼 수 있다. 더 나아가서 오브젝트 필들의 값을 읽고 수정할 수도 있고, 원하는 파라미터 값을 이용해 메소드를 호출할 수도 있다.
참 많은 것을 할 수 있는것 같다. 구체적인 내용은 다른 곳에 잘 나와있으니 책에 나오는 코드만 적도록 하겠다. 간단하게 특정 Class의 메소드를 실행시키는 방법은 알 수 있을 것이다. 책에는 String객체의 length, charAt메소드만 나오는데, argument가 2개인 substring메소드에 대한 테스트도 추가했다.
출처
- 위키피디아: 반영
- 토비의 스프링 3.1 6장_AOP p.437 ~ 438
반응형'Java > 기본' 카테고리의 다른 글
[Java9] Variable Handles (1) 2018.05.02 [Java9] try-with-resources Improvement (0) 2018.04.28 [Java9] 자바9 설치 (1) 2017.09.23 [Java7] 자바 숫자 _(언더바) 표현 (2) 2017.07.09 [Java7] readAllLines (0) 2017.02.09