[JAVA] 자바 Reflection 리플렉션
그냥 내공부
본 내용은 Markdown언어로 작성했지만 스킨이 적용안되는관계로 그냥 올림
# Java Reflection
### 프로그램내에서 자기 자신의 구조를 관리/수정하는 동작
**필드2개 `(foo,hello)`와 메소드 2개`(method1, method2)`를 다룸**
```java
import java.lang.reflect.*
class c
{
int foo = 10;
String hello = "How are you?"
void method1()
{
System.out.println("method1 called");
}
void method2(String str)
{
System.out.println(str);
}
}
```
<br>
**invoke로 메소드 사용하기(메소드 다루기)**
```java
public class Refleciton{
public static void main(String args[]) throws Throwable {
Class<?> cls = Class.forName("c");
c obj = new c();
Method mtd_list[] = cls.getDeclaredMethods(); // Method를 넣어라
mtd_list[0].invoke(obj);
mtd_list[1].invoke(obj, "method2 called");
}
}
```
- invoke의 첫번째 인자엔 오브젝트가 들어가야하고 두번째인자엔 실행할 함수의 인자들이 들어감
> [실행결과]
> C:\Userasdahlasd> java Reflection
> method1 called
> method2 called
**invoke로 메소드 사용하기(필드 다루기)**
```java
public class Refleciton{
public static void main(String args[]) throws Throwable {
Class<?> cls = Class.forName("c");
c obj = new c();
Field fld_list[] = cls.getDeclaredField();
for(Field f : fld_list)
{
System.out.println(f.get(obj));
}
}
}
```
**필드 값 수정 - set(object, value)**
```java
public class Refleciton{
public static void main(String args[]) throws Throwable {
Class<?> cls = Class.forName("c");
c obj = new c();
Field fld_list[] = cls.getDeclaredFields();
fld_list[0].set(obj, 20);
fld_list[1].set(obj,"I'm fine.");
for(Field f : fld_list)
{
System.out.println(f.get(obj));
}
}
}
```
'공부 > Java' 카테고리의 다른 글
[Android] 안드로이드 기초 Activity (0) | 2017.09.14 |
---|
댓글