์๋ฐ(Java)๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, 1995๋
์ ์ ๋ง์ดํฌ๋ก์์คํ
์ฆ
(ํ์ฌ ์ค๋ผํด)์ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ์ด๊ธฐ์๋ ๊ฐ์ ์ ํ ๋ด ์ํํธ์จ์ด ๊ฐ๋ฐ์
์ฌ์ฉํ๊ธฐ ์ํด ๊ณ ์๋์์ผ๋ฉฐ, ์ดํ ์น ๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์
๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธ์ด๊ฐ ๋์์ต๋๋ค.
์๋ฐ๋ ๋ํ์ ์ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค.
์ค์ ์ธ๊ณ๋ฅผ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ๋๋๊ณ ๊ฐ์ฒด๋ค๊ฐ์ ์ํธ์์ฉ์ ์๋ฏธํฉ๋๋ค.
์ฆ,ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๊ฐ์ ๋
๋ฆฝ์ ์ธ ๋จ์์ธ ๊ฐ์ฒด๋ค์ ๋ชจ์์ผ๋ก ํ์
ํ๊ณ ํ๋ ๊ฒ์
๋๋ค.
2.์ด์์ฒด์ ์ ๋
๋ฆฝ์ ์ผ๋ก ๋์
"Write once, run anywhere"
์ด์์ฒด์ ์ ์ข
๋ฅ์ ๊ด๊ณ์์ด ์คํ ๊ฐ๋ฅํฉ๋๋ค.
์๋ฐ ๊ฐ์ ๋จธ์ (JVM)์ ํตํด์ ๊ฐ๋ฅํ ์ผ์
๋๋ค.
์๋ฐ ๊ฐ์ ๋จธ์ : ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋จผ์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ ์ฝ๋(bytecode)๋ก ๋ณํ๋ฉ๋๋ค.
์ด ๋ฐ์ดํธ ์ฝ๋๋ ํน์ ์ด์์ฒด์ ๊ฐ ์๋ JVM์์ ์คํ๋ฉ๋๋ค.
JVM์ ์ด์์ฒด์ ์ ์๋ฐ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ์ค๊ฐ ๊ณ์ธต ์ญํ ์ ์ํํ๋ฉฐ,
์ด์์ฒด์ ์ ์ข
์๋๋ ๋ถ๋ถ์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ฐ ์ด์์ฒด์ ์ ๋ง๊ฒ ์ค๊ณ๋ JVM์ด ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ฐ์ดํธ ์ฝ๋๋ฅผ
๋ค๋ฅธ ์ด์์ฒด์ ์ JVM์์ ์คํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋, JVM์ ์ด์์ฒด์ ์ ์ข
์์ ์ด๋ค.์ฌ์์๋ ์ฌ๋ฌ ์ด์์ฒด์ ์
์ค์นํ ์ ์๋ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ JVM์ ์ ๊ณตํ๊ณ ์๋ค.
3.์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ๋ฌ๋ฆฌ, ์๋ฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ
์ฐธ์กฐ๋๊ณ ์์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ค๋๋ค.
์ด๋ฌํ ํน์ง์ผ๋ก ์ธํด ํ๋ก๊ทธ๋๋จธ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ ์ธ ํ์ ์์ด
์ค์ง ํ๋ก๊ทธ๋๋ฐ์๋ง ์ง์ค ํ ์ ์์ต๋๋ค.
ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๊ฐ ๋์ผํ ์ฐ๋ ๋๋ฅผ ๋์์ ์ํํ ์ ์์ต๋๋ค.
์๋ฐ์ ๋ฉํฐ์ฐ๋ ๋๋ ์์คํ
๊ณผ ๊ด๊ณ์์ด ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ, Java API๋ฅผ ํตํด ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์๋ฐ์ ๋ฉํฐ์ฐ๋ ๋ ์ง์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ํ์ฉํ์ฌ ๋์์ ์์
์ ์ํํ๊ณ
๋ณ๋ ฌ์ฑ์ ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ
๋ณต์กํ ์์
์ ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ค๋๋ค.
5.๋์ ๋ก๋ฉ์ ์ง์
๋์ ๋ก๋ฉ์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ํด๋์ค๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค.
์ด๋ ๋ฐํ์ ์์ ํ์ํ ํด๋์ค๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก,
์๋ฐ์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ ์ค๋๋ค.
์๋ฐ์ ๋์ ๋ก๋ฉ์ ์ฃผ๋ก ํด๋์ค๋ก๋(ClassLoader)์ ๋ฆฌํ๋ ์
(Reflection)์ ์ด์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
ํด๋์ค๋ก๋(ClassLoader): ํด๋์ค๋ก๋๋ ์๋ฐ ๋ฐํ์ ํ๊ฒฝ์์ ํด๋์ค๋ฅผ
๋์ ์ผ๋ก ๋ก๋ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
์๋ฐ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ ๊ฐ์ง ํด๋์ค๋ก๋๊ฐ ์ ๊ณต๋ฉ๋๋ค
1.๋ถํธ์คํธ๋ฉ ํด๋์ค๋ก๋ 2.ํ์ฅ ํด๋์ค๋ก๋ 3.์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค๋ก๋
๋ถํธ์คํธ๋ฉ ํด๋์ค๋ก๋๋ ์๋ฐ ๋ฐํ์ ์์ฒด๋ฅผ ๋ก๋ฉํ๋ ์ญํ ์ ํฉ๋๋ค
ํ์ฅ ํด๋์ค๋ก๋๋ ์์คํ
ํ์ฅ ์์ญ์ ํด๋์ค๋ฅผ ๋ก๋ฉํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค๋ก๋๋ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์คํจ์ค์ ์๋ ํด๋์ค๋ฅผ ๋ก๋ฉํฉ๋๋ค.
๊ฐ๋ฐ์๋ ์ปค์คํ
ํด๋์ค๋ก๋๋ฅผ ์์ฑํ์ฌ ๋์ ๋ก๋ฉ์ ๊ตฌํํ ์๋ ์์ต๋๋ค.
๋ฆฌํ๋ ์
(Reflection): ๋ฆฌํ๋ ์
์ ํ๋ก๊ทธ๋จ์ด ๋ฐํ์์ ์๊ธฐ ์์ ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ
์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค.
์๋ฐ์์๋ Class ํด๋์ค์ java.lang.reflect ํจํค์ง๋ฅผ ํตํด ๋ฆฌํ๋ ์
๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฆฌํ๋ ์
์ ์ด์ฉํ๋ฉด ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ก๋ํ๊ณ , ํด๋์ค์ ํ๋,
๋ฉ์๋, ์์ฑ์ ๋ฑ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋จ, ๋์ ๋ก๋ฉ์ ์ ์ ์ผ๋ก ์ปดํ์ผ๋ ํด๋์ค ํ์ผ์ ๋นํด ์ฑ๋ฅ์์ ์ค๋ฒํค๋๊ฐ
๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ ์ ํ ์์ธ ์ฒ๋ฆฌ์ ๋ณด์ ๊ฒ์ฌ๊ฐ ํ์ํฉ๋๋ค.
๋ํ, ์๋ชป๋ ์ฌ์ฉ์ ์ฝ๋ ๊ฐ๋
์ฑ์ ๋ฎ์ถ ์ ์์ต๋๋ค.