ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Reflection 리플렉션
    Java/기본 2018. 1. 21. 23:46

    토비의 스프링 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  (0) 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

    댓글

Designed by Tistory.