You are on page 1of 18

Reflection

강임남

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


목차

1 Reflection 이란 ?

2 언제 Reflection 이 필요할까 ?

3 Java 바탕지식

4 ReflectionAPI 와 예시

5 정리

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


ⓒSaebyeol Yu. Saebyeol’s PowerPoint
1
Reflection 이란 ?

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 1 Reflection 이란 ?

Reflect:
1. 비추다 . 2. 반사하다 . 3. 나타내다

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 1 Reflection 이란 ?

Reflection
모르는 대상을 사용해야할 때 ,
대상에 대해 정보를 알려주고 사용할 수 있도록 도와주는 기술

Runtime 시점에 , 컴파일 시점엔 몰랐던


Class 에 대한 정보를 검사해 파악하고 ,
클래스를 조작할 수 있도록 지원하는 기술

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


2
언제 Reflection 필요 ?

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 2 언제 Reflection 이필요할까 ?

언제 ?
대상인 Class Type 을
모르는 채로 객체를 생성해야하는 경우가 언제일까 ?

Code 작성 시점에는 어떤 Class 를 사용 해야할지 모르지만 ,


실행시점에는 Class 를 사용해 실행해야 하는 경우
즉,
동적으로 Class 를 사용해야할 경우

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 2 언제 Reflection 이필요할까 ?

어디에서 ?
프레임워크나 라이브러리 :
Spring Annotation, Spring Dependency Injection,
Hibernate 의 default constructor,
JUnit, jackson library 등

기타 :
정적 분석 툴 , IDE 의 java code 자동 완성 기능 등

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


3
Java 바탕지식

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 3 JAVA 바탕지식 -1

정적 바인딩 - compile 시점에 값이 확정


바인딩 Static Bind- - 실행 시 효율이 높고 , 안정적
ing - Overloading, final, static

동적 바인딩 - Runtime 시점에 값이 결정


컴퓨터 프로그래밍에서 Dynamic - 많은 메모리 공간 필요
각종 값들이 > Binding - 속도 저하 ( 타입 checking)
확정되어 ( 결정 ) - Overriding, java 의 다형성 , 상속이 가능한
변경할 수 없는 이유
구속 (bind) 상태가
되는 것 .

자바는 동적 바인딩을 통해 상속 , 다형성과 같은 다양한


기능을 사용할 수 있다 .

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 3 JAVA 바탕지식 -2

JVM 구조와 동적 바인딩 ,


Reflection

- 실체 : 사용자가 작성한
클래스를 뜻함

> - 투영체 : Java 코드가 실행이


되면서 Method Area 에 올라간
클래스 정보

- 매개체 ( 물 또는 거울 ):
java.lang.Class Class Type 인
Class 에 대입 (java.lang.reflect)

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 3 JAVA 바탕지식 -3

누가 언제 어디에서
프레임 워크 런타임 JVM

무엇을 왜 어떻게
Method Area 에 Code 작성시점에 Class Type 인
있는 Class 정보 Class
Class 정보 알 수 없음

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


4
Reflection API 와 예시

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 4 ReflectionAPI 와예시 - 1

Reflection API
(java.lang.reflect)

- Class(Interface, Enum)
- Constructor
- Method
- Field
...

클래스 정보를 활용한 Reflection API


가 제공하는 기능
1. 객체생성
2. 메서드 호출
3. 변수 값 설정 등

Reflection 을 통해 클래스의 메소드 ,


변수 , 생성자를 파악할 수 있고
동적으로 사용 가능하여 , 여러 가지
기능을 구현할 수 있다 .
ⓒSaebyeol Yu. Saebyeol’s PowerPoint
Part 4 ReflectionAPI 와예시 -2

Reflection API
상세 설명

- getClasses, getField …
- getXX: 해당 XX( 클래스 , 필드 ,
메소드 등 ) 이나 super 클래스에 선언
( 또는 구현 ) 되어 있고 public 접근
제한자를 가진 대상
- getDeclaredClasses …
- getDeclaredXX: 해당 XX( 클래스 ,
필드 , 메소드 등 ) 선언 ( 또는 구현 )
만 되어 있으면 됨 . 접근 제어자와 상관
없음 .

- newInstance: Class type Class 의


메소드로 해당 클래스 타입의
인스턴스를 생성해주는 메소드 . newIn-
stance() 구현부를 보면 , 대상의
생성자의 접근제어자가 Public 여야만
조회 및 사용이 가능함 .
ⓒSaebyeol Yu. Saebyeol’s PowerPoint
Part 4 ReflectionAPI 와예시 -3

성능 확인

- 생성자를 이용한 인스턴스 생성과


Reflection API 를 활용한 인스턴스
생성의 시간을 비교

- 0.0018845 VS 0.027349

- 14 ~ 15 배 차이

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


5
정리

ⓒSaebyeol Yu. Saebyeol’s PowerPoint


Part 6 마무리

Reflection 정리 Reflection 정리

Java 특징인 Reflection 이란 ? - 컴파일 시 확인하지 않고 런타임


시에만 발생하는 문제가 발생할 수 있다 .
프레임 워크처럼 Class 정보를
동적으로 바인딩하여 기능을 제공해
주는 대상이 JVM 에서 Runtime 할 - 접근 지시자를 무시할 수 있어 ,
때 , 프레임워크 기능 코드를 작성할 땐 추상화를 깰 수 있다 .
알 수 없던 Class 정보들을 JVM 의
메모리 Method Area 영역에서 알아와 - Java Reflection 의 다양한 기능이 Java
동적으로 처리하여 사용자에게 기능을 언어의 경계를 넘나드는데 도움을
제공해주는 것 주지만 , 성능 부하 또한 분명히
존재하기 때문에 주의해서 사용해야
한다 .

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

You might also like