-
[JAVA] ๋ฆฌํ๋ ์ (Reflection)๐ป IT Study/Knowledge 2022. 5. 25. 23:00
GoF ๋์์ธ ํจํด์ ๋ํ ๊ฐ์๋ฅผ ๋ฃ๋ค๊ฐ ๊ฐ์ฌ๋ถ๊ป์ ํ๋ฌ์ง๋๊ฐ๋ฏ์ด ๋ฆฌํ๋ ์ ์ ์ธ๊ธํ์ จ๋ค.
์ฑ๊ธํค ํจํด์ ๋ฆฌํ๋ ์ ์ผ๋ก ๊นจ๋จ๋ฆด ์ ์๋ค๋ ๊ฒ์ด์๋ค.
์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฆฌํ๋ ์ ์ ๋๊ฐ ์ดํดํ ์๋ ์์์ง๋ง ๋ ์์ธํ ์์๋ณด๊ณ ์ถ์๋ค.
๋์ค์ ๋์์ธ ํจํด์ ๋ํด ๋ฐ๋ก ์ ๋ฆฌํ ์์ ์ด๋ค :-)
๋ฆฌํ๋ ์ (Reflection)์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค ํ์ ์ ์์ง ๋ชปํด๋ ๊ทธ ํด๋์ค์ ๋ฉ์๋, ํ์ , ๋ณ์๋ค์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ API(Application Programming Interface)์ด๋ค.
์๋ฐ๋ ์ปดํ์ผ ์์ ์ ํ์ ์ ๊ฒฐ์ ํ๋ ์ ์ ์ธ์ด์ด๋ค.
๊ทธ๋ฌ๋ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ๋ฆฌํ๋ ์ ์ด ์ฌ์ฉ๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ ์์ ์๋ ์ด๋ค ํ์ ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์คํ์์ ์ธ ๋ฐํ์์ ์คํ๋๊ณ ์๋ ํน์ ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ ์คํํด์ผ ํ๋ค.
Where is it used?
ํ๋ ์์ํฌ๋ IDE์์ ๋์ ๋ฐ์ธ๋ฉ์ ์ด์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ํ์ ์ผ๋ก๋ IDE(Intergrated Development Environment)์ ์๋์์ฑ, ์คํ๋ง ํ๋ ์์ํฌ์ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฅ์ด๋ค.
EX1 | IDE ์๋์์ฑ ๊ธฐ๋ฅ
IDE๋ก ๊ฐ๋ฐ ์ ์๋์์ฑ ๊ธฐ๋ฅ ๋๋ถ์ ์ฐ๋ฆฌ๋ ํน์ ํด๋์ค์ ๋ฉ์๋๋ค์ ์์ฝ๊ฒ ์ฐพ์์ ์ฌ์ฉํ๋ค.
Date ํ์ ์ ๋ณ์๋ฅผ ์ ๋ ฅ ํ date ๊ฒ์๋ง ํด๋ ์ฌ๋ฌ๊ฐ์ ๋ฉ์๋๊ฐ ๋ณด์ฌ์ง๋ค.
์ด๋ date ๋ณ์์ ํ์ ์ด Date ํด๋์ค ์ธ๊ฒ์ IDE๊ฐ ๋จผ์ ํ์ธํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์๋ ๊ฒ์ ์ด์ฉํ์ฌ ๋์ ์ผ๋ก ์คํํ ์ ์๊ฒ ํ๋ค.
EX2 | ์คํ๋ง ํ๋ ์์ํฌ์ ์ด๋ ธํ ์ด์
์คํ๋ง์ด ๋ฆฌํ๋ ์ ์ ์ด์ฉํ์ฌ ๋ฐํ์ ์์ ๊ฐ๋ฐ์๊ฐ ๋ฑ๋กํ ๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์ค๊ณํ ๋๋ ์ฌ์ฉ๋ ํด๋์ค๊ฐ ์ด๋ค ํ์ ์ธ์ง ๋ชจ๋ฅด์ง๋ง ๋ฆฌํ๋ ์ ์ ํตํด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์คํ์์ ์ ํ์ธํด์ ํ์ฉํ ์ ์๋๋ก ํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
How is it possible?
์๋ฐ ํด๋์ค ํ์ผ์ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ ๋์ด static ์์ญ์ ์์นํ๋ค.
๊ทธ๋ ๊ธฐ์ ํด๋์ค ์ด๋ฆ๋ง ์๊ณ ์๋ค๋ฉด ์ด ์์ญ์์ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
* static
: ์ปดํ์ผ๋ฌ์ ์ํด .java์์ .class ํ์ผ๋ก ๋ก๋ ์ ์ฐ์ ์ ์ผ๋ก method์์ญ(=static ์์ญ, class์์ญ) ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
> ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ ํ ๋น๋์ด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ํด์ ๋๋ ๊ฒ.Problem
1. ์ฑ๋ฅ์ด ๋ฎ๋ค.
๋ฆฌํ๋ ์ ์ ๊ณ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๊ณ์ ์์ฑํ๊ธฐ
2. ์ปดํ์ผ ์ ํ์ธํ์ง ์๊ณ ๋ฐํ์ ์์๋ง ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ปดํ์ผ ์์ ์ ํ์ ๊ฒ์ฌ์ ์์ธ ๊ฒ์ฌ๊ฐ ์ฃผ๋ ์ด์ ์ ๋๋ฆด ์ ์๋ค.
๋ฆฌํ๋ ์ ์ ํตํด ์กด์ฌํ์ง ์๊ฑฐ๋ ์ ๊ทผํ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์คํ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Conclusion
๋ฆฌํ๋ ์ ์ ๋ณต์กํ ํน์ ์์คํ ๊ฐ๋ฐ ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด๋ค.
์ปดํ์ผ ์์ ์๋ ํด๋น ํด๋์ค์ ํ์ ์ ์ ์ ์์ ๊ฒฝ์ฐ์๋ง ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๊ฐ์ฒด๋ ์ด๋ฏธ ์์ฑ๋์ด ์๊ณ ๊ณ์ ํ์ฉํ ์ ์์ผ๋ฉด ๋ฆฌํ๋ ์ ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ถํ์ํ๋ค.
๋๋๋ก์ด๋ฉด ๊ฐ์ฒด ์์ฑ์๋ง ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๊ณ ,
์์ฑํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ๋๋ ์ ์ ํ ์ธํฐํ์ด์ค๋ ์ปดํ์ผ ํ์์ ์ ์ ์๋ ์์ ํด๋์ค๋ก ํ๋ณํํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
โป ์ฐธ๊ณ
- https://brunch.co.kr/@kd4/8
- https://velog.io/@suyeon-jin/%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-DI%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C
- https://velog.io/@eversong/Effective-Java-65.-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC
- https://itstory.tk/entry/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-%EA%B7%9C%EC%B9%9953-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-%EB%8C%80%EC%8B%A0-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EB%9D%BC
'๐ป IT Study > Knowledge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ์ค๋ผํด ์๋ ธ๋(Oracle Synonym) (0) 2022.06.01 [๋คํธ์ํฌ] DMZ(DeMilitarized Zone) (0) 2022.05.24 [์ฉ์ด์ ๋ฆฌ] SSH(Secure Shell) (0) 2022.05.23 JVM ๋์๊ณผ์ (0) 2022.05.22 ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ๋ชจ์zip (0) 2022.04.20