μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- μλ°
- μ
- StringBuilder
- μ€ν
- ν방쿼리
- μ°μ°μ
- μΏ ν‘DB
- λ°±μ€9093
- λ°±μ€11053 #νμ΄μ¬ #python
- λ°°μ΄
- λ
- λ°μ΄ν°νμ
- java
- λ°±μ€1874
- λ¬Έμμ΄
- μ€νμμ΄
- μΏ ν‘ERD
- μ°
- StringBuffer
- μ€νΈλ¦Ό
- stream
- λ°±μ€9012
- Today
- Total
Tech Log π οΈ
μλ° Reflection μ΄λ λ³Έλ¬Έ
리νλ μ μ΄λ?
μλ° κ³΅μ λ¬Έμμμλ 리νλ μ μ λ€μκ³Ό κ°μ΄ μ μνκ³ μλ€.
Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.
κ°λ¨νκ² ν΄μν΄λ³΄λ©΄, μλ° μ½λλ₯Ό ν΅ν΄ λ‘λλ ν΄λμ€μ λν΄ μ κ·Ό μ νμμ κ΄κ³ μμ΄ νλ , μμ±μ , λ©μλλ₯Ό μ΄μ©ν μ μκ³ ν μ μλ€κ³ νλ€.
λ‘λλ ν΄λμ€λ , ν΄λμ€ λ‘λ λ΄μμ ν΄λμ€λ₯Ό λ‘λν νμ ν΄λΉ ν΄λμ€μ μ 보λ₯Ό λ΄μ κ°μ²΄λ₯Ό νμ μ μ₯ν΄ λ κ²μ΄λ€.
https://cb036133.tistory.com/132
μ μ¬μ©ν κΉ?
리νλ μ μ μ¬μ©νλ©΄ μ κ·Ό μ νμμ μκ΄μμ΄ λͺ¨λ ν΄λμ€λ₯Ό μ΄μ©ν μ μλ€.
μ¬μ€ μ΄κ²μ μΊ‘μν, μλνλ₯Ό 무λ ₯ν μν€λ κ±΄λ° μ€νλ € μ¬μ©μ μ§μν΄μΌ νμ§ μμκΉ?
μκ·λͺ¨μ νλ‘κ·Έλ¨μμλ 리νλ μ μ μ¬μ©μ΄ λΆμ ν©ν μ μλ€.
νμ§λ§ ν¨ν€μ§ , λͺ¨λ κ΅¬μ‘°κ° λ³΅μ‘νκ³ μμ‘΄ κ΄κ³ νμ μ΄ νλ νλ‘μ νΈμμλ 리νλ μ μ΄ μ£Όλ μ΄μ μ΄ λ§λ€.
λνμ μΌλ‘ μ΄λ Έν μ΄μ μ΄ μλλ° μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ νλ μμν¬μμ νμ ν ν΄λΉ ν΄λμ€λ₯Ό κ΄λ¦¬ν΄μ€λ€.
μ¬κΈ°μ 리νλ μ μ κΈ°μ μ΄ μ¬μ©λμλλ° , μ¦ λ°νμ μμ μ κ°μ²΄λ₯Ό μμ±ν μ μλ κ²μ΄λ€
리νλ μ μ μ£Όλ‘ νλ μμν¬λ λΌμ΄λΈλ¬λ¦¬μμλ μ»΄νμΌ μμ μ μ μ μλ μ 보λ₯Ό λ°νμ μμ μ λΆλ¬μ€κΈ° μν΄ μ¬μ©νλ€.
μ΄λ»κ² μ¬μ©ν κΉ?
1. ν΄λμ€ μ°ΎκΈ°
Class<Test> ReflectionTest = Test.class;
2.μμ±μ μ°ΎκΈ°
Test test = new Test();
Class<? extends Test> getClassTest = test.getClass();
3.λ©μλ μ°ΎκΈ°
Class<?> ReflectionTest = Class.forName("Test");
μ¬κΈ°μ μ€μν μ μ μ΄λ€ λ°©λ²μΌλ‘ μΈμ€ν΄μ€λ₯Ό κ°μ Έμ€λ λͺ¨λ κ°μ μΈμ€ν΄μ€λΌλ κ²μ΄λ€ !
μ΄μ κ°μ Έμ¨ μΈμ€ν΄μ€λ€μ μ΄λ»κ² νμ©νλ μ§ μμ보μ
μμ μ½λ
λ¨Όμ μμ±μλ₯Ό κ°μ Έμ€λ μ½λ !
// λͺ¨λ μμ±μλ€μ κ°μ Έμ¬ μ μλ€.
Arrays.stream(testClass.getConstructors()).forEach(System.out::println);
//μμ±μλ₯Ό 리νλ μ
μΌλ‘ κ°μ Έμμ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
Constructor<? extends Test> constructor =
getClassTest.getConstructor(null);
// 리νλμ
μΌλ‘ κ°μ Έμ¨ μμ±μλ₯Ό ν΅ν΄ κ°μ²΄ μμ±
Test test1 = constructor.newInstance();
// μμ±μμ νμν νλΌλ―Έν° νμ
λ€μ μ€μ ν μ μλ€.
Constructor<? extends Test> stringConstructor =
getClassTest.getConstructor(String.class, String.class, String.class);
// 리νλμ
μΌλ‘ κ°μ Έμ¨ μμ±μλ₯Ό ν΅ν΄ κ°μ²΄ μμ±
Test test2 = stringConstructor.newInstance("param1", "param2", "param3");
}
λ€μμ λ©μλλ₯Ό κ°μ Έμμ μ΄μ©ν΄λ³΄μ
//μΈμ€ν΄μ€ νλλ₯Ό κ°μ Έμ¬ μ μλ€.
Field c = getClassTest.getDeclaredField("field1");
// νλ μ κ·Όμ νμ©μμΌμ€λ€.
field1.setAccessible(true);
// νλλ₯Ό λ³κ²½ν μ μλ€.
c.set(test, "fieid1_modified");
// λ©μλλ κ°μ Έμ¬ μ μλ€.
Method func = getClassTest.getDeclaredMethod("func");
// λ©μλ νΈμΆ!
func.invoke(test);
리νλ μ μ μ₯/λ¨μ
μ₯μ
1. λ°νμμ κ°μ²΄λ₯Ό μμ±νκ³ μμ±μ , λ©μλ , νλλ₯Ό μ΄μ©ν μ μλ€.
λ¨μ
1. μΊ‘μνλ₯Ό μ ν΄ν μ μλ€.
2. κ°λ μ±μ μ ν΄μν¬ μ μλ€.
3. μΌλ°μ μΌλ‘ μ¬μ©νμ λλ³΄λ€ μ²λ¦¬ μ±λ₯μ΄ λ¨μ΄μ§λ€.
μ°Έκ³ μλ£
https://papimon.tistory.com/82
https://medium.com/msolo021015/%EC%9E%90%EB%B0%94-reflection%EC%9D%B4%EB%9E%80-ee71caf7eec5
https://brunch.co.kr/@oemilk/172