2023. 7. 15. 16:22ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Java
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ Annotaion (์ด๋ ธํ ์ด์ ) ์ด๋?
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
Annotation์ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ด์.
โ ์ฌ์ ์ ์๋ฏธ๋ก ์ฃผ์์ด๋ผ๋ ๋ป
โ Java์์ Annotaion์ Code ์ฌ์ด์ ์ฃผ์์ฒ๋ผ ์ฐ์ด๋ฉฐ, ํน๋ณํ ์๋ฏธ, ๊ธฐ๋ฅ์ ์ํํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธ
- ํ๋ก๊ทธ๋จ์๊ฒ ์ถ๊ฐ์ ์ ๋ณด ์ ๊ณต์ ์ํ ๋ฉํ ๋ฐ์ดํฐ
- ๋ฉํ ๋ฐ์ดํฐ๋? ๋ฐ์ดํฐ๋ฅผ ์ํ ๋ฐ์ดํฐ๋ก ๋ฐ์ดํฐ์ ๋ํ ์์ ์ ๋ณด๋ฅผ ์๋ฏธ.
๋์๊ด์ ์๋ฅผ ๋ค์๋ฉด ํ์ , ์ ์, ์ฃผ์ , ๋ถ๋ฅ ๊ธฐํธ ๋ฑ์ด ํฌํจ ๋ ๋ชฉ๋กํ ๋ ๋ฐ์ดํฐ
์ฌ์ฉ ์์
1. ์ด๋
ธํ
์ด์
์ ์
2. Class์ ์ด๋
ธํ
์ด์
์์ฑ
3. ์ฝ๋ ์คํ ์ค Reflection์ ์ด์ฉ ์ถ๊ฐ ์ ๋ณด ํ๋ํ์ฌ ๊ธฐ๋ฅ ์ํ
๐ฆ Annotation ์ข ๋ฅ
โ ํ์ค(๋ด์ฅ) : ์๋ฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ด๋
ธํ
์ด์
โ ๋ฉํ : ์ด๋
ธํ
์ด์
์ ์ํ ์ด๋
ธํ
์ด์
โ ์ฌ์ฉ์ ์ ์ : ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ํ ์ด๋
ธํ
์ด์
๐ฆ Reflection์ด๋?
โ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค ์์ ์ ๊ตฌ์กฐ์ ๋์์ ๊ฒ์ฌ, ์กฐ์ฌ, ์์ ํ๋ ๊ฒ์ ์๋ฏธ.
โ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๋ค๋ฅธ ํฌ๋งท์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ํต์ ์ ์ํด serializaion(์ง๋ ฌํ)๋ฅผ ์ํํ๊ณ , bundling ํ๊ธฐ
์ํด ์ผ๋ฐ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๋๋ก ๋์์ค๋ค.
โ ์๋ฐ์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ Reflection ์ฌ์ฉ ์ ์ปดํ์ผ ๋จ๊ณ์ Interface, Field, Method
์ด๋ฆ์ ์์ง ๋ชปํด๋ ์คํ ์ค Class, Interface, Field ๋ฐ Method ์ ๊ทผ ๊ฐ๋ฅ.
โ ์๋ก์ด ๊ฐ์ฒด์ ๊ฐ์ฒด(์ธ์คํด์ค)ํ ๋ฐ ๋ฉ์๋ ํธ์ถ ํ์ฉ.
โ ์๋ฐ์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ Reflection ์ฌ์ฉ ์ member ์ ๊ทผ ๊ฐ๋ฅ์ฑ ๊ท์น ๋ฌด์ ๊ฐ๋ฅ.
โ ์คํ๋ง์์ BeanFactory๋ผ๋ Container์์ ๊ฐ์ฒด ํธ์ถ ์ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ, ์ด ๋ ํ์.
์ฆ, ํ๋ ์์ํฌ์์ ์ ์ฐ์ฑ ์๋ ๋์์ ์ํด ์ฌ์ฉ.
โ ์ด๋
ธํ
์ด์
์์ฒด๋ ์๋ฌด ๋์์ ๊ฐ์ง์ง ์๋ ๋จ์ ์ฃผ์(ํ์)์ผ ๋ฟ์ด์ง๋ง, Reflection ์ด์ฉ ์ ์ด๋
ธํ
์ด์
์ ์ฉ ์ฌ๋ถ์
์๋ฆฌ๋จผํธ ๊ฐ์ ์ฝ๊ณ , ์ฒ๋ฆฌ.
โ ํด๋์ค์ ์ ์ฉ๋ ์ด๋
ธํ
์ด์
์ ๋ณด๋ฅผ ์ฝ์ผ๋ ค๋ฉด java.lang.Class ์ด์ฉ, ํ๋, ์์ฑ์, ๋ฉ์๋์ ์ ์ฉ๋ ์ด๋
ธํ
์ด์
์ ๋ณด๋ฅผ
์ฝ์ผ๋ ค๋ฉด ํด๋์ค ๋ฉ์๋๋ฅผ ํตํด java.lang.reflect Package์ ๋ฐฐ์ด์ ์ป์ด์ผ ํจ.
- Class.forName(), getName(), getModifier(), getFields(), getPackage() ๋ฑ ์ฌ๋ฌ ๋ฉ์๋๋ก ์ ๋ณด ๊ฐ์ ธ์ด.
โ Reflection ์ด์ฉ ์ ์ด๋
ธํ
์ด์
์ง์ ๋ง์ผ๋ก ์ํ๋ ํด๋์ค์ ์ฃผ์
๊ฐ๋ฅ.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."