Skip to content

Latest commit

ย 

History

History
77 lines (59 loc) ยท 3.09 KB

File metadata and controls

77 lines (59 loc) ยท 3.09 KB

๐Ÿ“Œ Reflection API?

๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” java API


public class People {
    private String name;
    private int age;
    private int nprogram;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
        nprogram = 0;
    }

    public void coding() {
        this.nprogram++;
    }

    public int getNprogram() {
        return nprogram;
    }
}
 Object objPeople = new People("kim", 25);

//Objectํ˜•์˜ People์€ coding์„ ํ•˜์ง€ ๋ชปํ•จ.
objPeople.coding (x)
  • ์ž๋ฐ”๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž…์ด ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋Š” ์ด๋ฏธ ์ปดํŒŒ์ผ ํƒ€์ž„์— Objectํƒ€์ž…์œผ๋กœ ๊ฒฐ์ •์ด ๋˜์–ด People์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. Object ํƒ€์ž…์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
Class PeopleClass = People.class;
Method coding= PeopleClass.getMethod("coding");
coding.invoke(objPeople, null);

System.out.println(PeopleClass.getMethod("getNprogram")
        .invoke(objPeople,null));
  • Reflection API๋ฅผ ์ด์šฉํ•˜์—ฌ Peopleํด๋ž˜์Šค๋ฅผ ์–ป์–ด์˜ค๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. invoke์˜ ์ธ์ž๋กœ ์‹คํ–‰ํ•  ๊ฐ์ฒด์™€ args๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. getNprogram ์‹คํ–‰ ๊ฒฐ๊ณผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด ์žˆ๋˜ ๊ฐ’์ด 1๋กœ ์ฆ๊ฐ€ํ•˜์˜€์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
String objPeopleName =PeopleClass.getDeclaredField("name").get(objPeople).toString();
System.out.println(objPeopleName);

Field[] objPeoplefields =PeopleClass.getDeclaredFields();
for(Field f: objPeoplefields){
    System.out.println(f.get(objPeople));
}
  • ์‹ฌ์ง€์–ด private๋กœ ์„ ์–ธ๋œ ํ•„๋“œ์—๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. ์ •์ƒ์ ์œผ๋กœ objPeople์„ ์ƒ์„ฑํ• ๋•Œ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด ์ฃผ์—ˆ๋˜ ๊ฐ’์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.
  • public ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” getFields๋ฅผ ์‚ฌ์šฉ.
f.set(objPeople, f.get(objPeople) + " Reflection");

img.png

  • private ํ•„๋“œ๊ฐ’์˜ ๋ณ€๊ฒฝ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง ์–ด๋–ป๊ฒŒ?


์ž๋ฐ”์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด Static ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. Reflection API๋Š” ์ด ์˜์—ญ์— ์ ‘๊ทผํ•˜์—ฌ ํ•ด๋‹น ์ •๋ณด๋“ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ Reflection์„ ์‚ฌ์šฉํ•œ๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ ๋นˆ ํŒฉํ† ๋ฆฌ์—์„œ Reflection์„ ์ด์šฉํ•˜์—ฌ Bean์„ ๊ด€๋ฆฌํ•˜๊ณ , Hibernate์—์„œ ๋˜ํ•œ Refelction์„ ์ด์šฉํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค. ๋•Œ๋ฌธ์— default constructor๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ํ•„๋“œ์˜ ๊ฐ’์„ ์ฃผ์ž…ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์‹œ๋„ํ•ด๋ณธ ๋ฉ”์†Œ๋“œ๋“ค ๋ง๊ณ ๋„ ๋งŽ์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ ‘๊ทผ์ง€์ •์ž, ์ƒ์„ฑ์ž, ํŒจํ‚ค์ง€ ์ •๋ณด, ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ ์ˆ˜ ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

- Hibernate์—์„œ ์–ด๋–ป๊ฒŒ ์—”ํ‹ฐํ‹ฐ์— ํ•„๋“œ๊ฐ’์„ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š”๊ฐ€๋ฅผ ์•Œ์•„๋ณด๋‹ค๊ฐ€ Reflection์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.    
- ์ƒ์ด๋‹นํžˆ ์œ ์šฉํ•œ API์ด์ง€๋งŒ ์„ฑ๋Šฅ๋ฉด์—์„œ ์กฐ๊ธˆ ๋‹จ์ ์ด ์žˆ๊ณ , ์•„๊นŒ ๋ณด์•˜๋“ฏ private์—๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.