ํด๋น ๋ด์ฉ์ ๊ณต๋ถ์ ๋ชฉ์ ์ผ๋ก ๊ธฐ๋ก๋์์ผ๋ฉฐ,
์๋ ๋ด์ฉ์ ๋ชจ๋ ๊ตฌ๊ธ ๊ฒ์์ผ๋ก ๊ณต๋ถ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์ต๋๋ค.
์ด์ฌํ ๋ฐฐ์ฐ๋ ์ค์
๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๐ ๋ฆฌํ๋ ์
(Reflection)
๋ฆฌํ๋ ์
์ ์์ฑ์, ๋ฉ์๋, ํ๋ ๋ฑ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ์์ฃผ ์์ธํ ์๋ ค์ฃผ๋ ์๋ฐ API ์ด๋ค.
๋ํ์ ์ธ ์์๋ก ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ์์ ์ฌ์ฉ๋๋ ์ด๋
ธํ
์ด์
์ด ๋ฆฌํ๋ ์
์ ํตํด ํ์ธํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์๋ค.
๋ฆฌํ๋ ์
์ ์ฌ์ฉํ๋ฉด ์ ๊ทผ ์ ์ด์์ ๋ฌด๊ดํ๊ฒ ํด๋์ค์ ํ๋๋ ๋ฉ์๋๋ ๊ฐ์ ธ์์ ํธ์ถํ ์ ์๋ค.
๐ ์ด๋
ธํ
์ด์
(Annotation) ๊ฐ์ ธ์ค๊ธฐ
๋ํ์ ์ธ ์์ ์ค ํ๋๋ฅผ ์ค์ตํด๋ดค๋ค.
๐ ์์ ์ด๋
ธํ
์ด์
์์ฑ
์ด๋
ธํ
์ด์
์ ํด๋ ๊ตฌ์ฑ
Controller, RequestMapping, Service ๋ฅผ ์์ฑ
์์ ์ด๋
ธํ
์ด์
์ ์ฝ๋
๐ ์ด๋
ธํ
์ด์
์ ์ธ์ฝ๋
๋๋ณด๊ธฐ
์ด๋
ธํ
์ด์
์ ์ ์ธํ๊ธฐ ์ํ ์ฝ๋๋ก @Target ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์๋ค. ํด๋น ์ฌ์ฉ์๊ฐ ๋ง๋ ์ด๋
ธํ
์ด์
์ด ๋ถ์ฐฉ๋ ์ ์๋ ํ์
์ ์ง์ ํ๋ค. (ํ์
: ํด๋์ค, ์์ฑ์, ๋ฉ์๋ ๋ฑ๋ฑ)
์ด๋
ธํ
์ด์
์ ์ธ์ฝ๋ ๊ตฌ์ฑ
์ฌ์ฉ์ ์์ฑ: @Controller
@Retention์ ํด๋น ์ด๋
ธํ
์ด์
์ด ์ธ์ ๊น์ง ์ ์งํ ์ง ์๋ ค์ฃผ๋ ์ด๋
ธํ
์ด์
์ด๋ค.
์ด๋
ธํ
์ด์
์ ์ ์ธํ๊ธฐ ์ํด์ ์ฌ์ฉ์์ ์์ฑ ์ด๋
ธํ
์ด์
๋ํ ์ด๋ ์์ ๊น์ง ์ ํจํ์ง๋ฅผ ๋ช
์ํด์ค์ผ ํ๋ค.
@Retention์ ์ฌ์ฉํ๋ RetentionPolicy๋ SOURCE, CLASS, RUNTIME ์ด๋ ๊ฒ 3๊ฐ์ง ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
* SOURCE
- ์ปค์คํ
ํ ์ด๋
ธํ
์ด์
์ ์ฃผ์์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ์ฌ์ฉํ ๊ฒฝ์ฐ ์ปดํ์ผ ํ ์์ฑ๋ .class ์ ํด๋น ์ด๋
ธํ
์ด์
์ ๋ณด๊ฐ ์ฌ๋ผ์ง๊ณ ์์ค์ฝ๋๊น์ง๋ง ์ ์งํ๋ค.
- ์ปดํ์ผ ํ ํด๋น ์ด๋
ธํ
์ด์
์ ์ฌ๋ผ์ง๋ค.
* CLASS
- @Retention์ ๊ธฐ๋ณธ๊ฐ ํด๋์ค ํ์
์ด๋ค.
- ๋ฐํ์ ์ ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฝ์ด์ค๋ฉด ํด๋น ์ ๋ณด๋ ์ฌ๋ผ์ง๋ค.
* RUNTIME
- ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฝ์ด์์ ๋๊น์ง ์ ์งํ๋ค.
- ์ฝ๋์์ ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํน์ ๋ก์ง์ ์คํํ ์ ์๋ค.
๐ ์ด๋
ธํ
์ด์
๋ถ์ฐฉ ํด๋์ค ์์ฑ
HomeController.class
์์ฑํ ์ด๋
ธํ
์ด์
์ ๋ถ์ฐฉํ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
๐ ํ
์คํธ ์ฝ๋
ํ
์คํธ ํด๋์ค ์์ฑ
ReflectionTest.class
ํ
์คํธ ์ฝ๋
์คํ ๊ฒฐ๊ณผ
์ด๋
ธํ
์ด์
Controller์ Service ๊ฐ ๋ถ์ฐฉ๋ ํด๋์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋ค.
ํ
์คํธ ์ฝ๋2
์คํ ๊ฒฐ๊ณผ
๐ ๋์ผ๋ก
Reflection์ ๊ณต๋ถํ๋ฉด์ ์์ฃผ ๋ฑ์ฅํ๋ ๋ง์ด ์๋๋ฐ '๊ตณ์ด ์์์ผํ ๊น?', 'ํ์ฉํ ์ผ์ด ๊ฑฐ์ ์๋ค' ๋ฑ์ด๋ค.
์๊ฐ์ฒ๋ผ ์ ๋ณด๋ฅผ ํ์ธํ๋ ๊ธฐ๋ฅ์ด์ง๋ง, ํํ ์ฌ์ฉํ๊ฒ ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ๋ชจ๋ฅผ๋ฆฌ ์์ด ์ฌ์ฉํ์ง ์๋ ๋ฏ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋จ์ ์ผ๋ก ์๋ ค์ง ๋ด์ฉ๋ค ์ค, ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ์๋ค.
์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์ ๋์ ์ผ๋ก ํ์
์ ๋ถ์ํ๊ณ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก JVM์ ์ต์ ํ ํ ์ ์๋ค๊ณ ํ๋ค.
(์์ง ๋ฌด์จ ์๋ฆฌ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์์ข์ ๊ฒ ๊ฐ๋ค.)
๋จ์ ์ด๋ผ ๋งํ๊ณ ์์๋ชปํ ๋ถ์์ฉ์ ๊ตณ์ด ๊ฐ์ํ ํ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ๋ง์๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค.
์ฐพ์ผ๋ฉด์ ๋ฐฐ์ด ์ด๋
ธํ
์ด์
์ ์ ์ธ์ฝ๋๋ ์๊ฒ๋์๋ค.์์ง๊น์ง ์ง์ ์ ์ผ๋ก ์ด๋
ธํ
์ด์
์ ์์ฑํ๊ณ ์ฌ์ฉํ๊ธฐ๊น์ง ์ค๋ ฅ์ด ๋ถ์กฑํ์ง๋ง, ์ข์ ๊ณต๋ถ๊ฐ ๋์๋ค.
์ถ์ฒ | hudi
์๋ฐ ๋ฆฌํ๋ ์
(Reflection) ๊ธฐ์ด
๋ฆฌํ๋ ์
(Reflection) JVM์ ํด๋์ค ์ ๋ณด๋ฅผ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด์์ ํด๋น ์ ๋ณด๋ฅผ JVM ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค. ๊ทธ๋ ๊ฒ ์ ์ฅ๋ ํด๋์ค์ ๋ํ ์ ๋ณด๊ฐ ๋ง์น ๊ฑฐ์ธ์ ํฌ์๋ ๋ชจ์ต๊ณผ ๋ฎ์์์ด, ๋ฆฌํ๋ ์
hudi.blog
์ถ์ฒ | goodGid
Spring MVC - @Retention ์ ๋
ธํ
์ด์
Index
goodgid.github.io
์ถ์ฒ | Tecoble
Reflection API ๊ฐ๋จํ ์์๋ณด์.
Spring Framework๋ฅผ ํ์ตํ๋ค ๋ณด๋ฉด Java Reflection API๋ฅผ ์์ฃผ ์ ํ๊ฒ ๋๋ค. ํ์ง๋ง Reflection APIโฆ
tecoble.techcourse.co.kr