본문 바로가기
공부/Java

[JAVA] 자바 Reflection 리플렉션

by 병진들 2017. 9. 15.

[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

댓글