JAVA์ ๋ฑ์ฅ
"๊ฐ์ ์ ํ์ ์ฌ์ฉํ ์ํํธ์จ์ด๋ฅผ ์ํ ๋ ๋ฆฝ์ ์ธ ์ธ์ด"
๊ฐ์ ์ ํ์ ์ฌ์ฉํ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๋ ๋ ๋ฆฝ์ ์ธ ์ธ์ด๊ฐ ํ์ํ๊ฒ ๋์๋ค. ๋ํ ๊ฐ์ ์ ํ์ ์ํ ์ํํธ์จ์ด์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ต์ฅํ ์ ์ด์ผํ๋ค. ์ด๋ก ์ธํด์ ๊ฐ๋ฐ๋ ๊ฒ์ด ์๋ฐ์ด๋ค. ํ์ฌ๋ ์ค๋ผํด์์ ์๋ฐ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
JAVA ๋ฐฐ๊ฒฝ ์ง์
1. WORA (Write Once Run AnyWhere)
์๋ฐ๋ ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์ด์์ฒด์ ๋ ํ๋์จ์ด์ ์๊ด์์ด ์๋ฐ ๊ฐ์ ๊ธฐ๊ณ๋ง ์์ผ๋ฉด ์ด๋์๋ ์๋ฐ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋์ผํ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ๋ฉฐ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค. ๋ฐ๋ผ์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ํ๋ฒ ์์ฑํ๋ฉด(Write Once) ์ด๋์๋ ์คํํ ์ ์๋ค.(Run AnyWhere)
2. ๋ฐ์ดํธ ์ฝ๋
๋ฐ์ดํธ ์ฝ๋๋ ์๋ฐ ๊ฐ์ ๊ธฐ๊ณ์์๋ง ์คํ๋๋ ๊ธฐ๊ณ์ด, ์ด๋ค CPU์๋ ์๊ด์๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ด๋ค. ์๋ฐ ์ปดํ์ผ๋ฌ๋ ์์ค ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ์ฌ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ ํด๋์ค ํ์ผ์ ์์ฑํ๋ค. ์ด ํด๋์ค ํ์ผ์ CPU์ ์ํด ์คํ๋๋ ๊ฒ์ด ์๋, ์๋ฐ ๊ฐ์ ๊ธฐ๊ณ๊ฐ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํ์ํจ๋ค.
3. ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์
๋ฐํ์ ์ดํ์ Row ๋จ์๋ก ํด์ํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋์ํค๋ ๋ฐฉ์์ด๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ก ๋ฐ๊พธ์ง ์๊ณ ์ค๊ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น ๋ค, ๋ฐํ์์ ์ฆ์ ํด์ํ๊ธฐ ๋๋ฌธ์ ๋ฎ์ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ด๊ฒ ๋๋ค. ํ์ง๋ง ๋ฐํ์์ ์ค์๊ฐ์ผ๋ก ๋๋ฒ๊น ๋ฐ ์ฝ๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๋๋ก ํ ๋น๋ฐ์ ์ํ๋์ง ์์ผ๋ฉฐ, ํ์ํ ๋ ํ ๋นํ์ฌ ์ฌ์ฉํ๋ค. ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ธํฐํ๋ฆฌํฐ๋ ํด์์ ์ํ ๊ฐ์ ๋จธ์ ์ ๋๊ณ , ๊ฐ์ ๋จธ์ ์์์ Interpret์ ์ํํ๊ฒ ๋๋๋ฐ, ์ด๋ ํด์์ ๊ธฐ๋ฐ์ด ๋๋ ๊ฐ์ ๋จธ์ ๋ค์ด OS ํ๊ฒฝ๋ค์ ์ง์ํด์ค์ผ๋ก์จ, ํด๋น ๋ฐฉ์์ผ๋ก OS ๋ฐ ํ๋ซํผ์ ์ข ์๋์ง ์๋ ํ๋ก๊ทธ๋จ ๊ตฌ๋์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
4. ์๋ฐ ๊ฐ์๊ธฐ๊ณ(JVM)
์ํํธ์จ์ด๋ก์, ์๋ก ๋ค๋ฅธ ํ๋ซํผ์์ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ผํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ์๋ฐ ๊ฐ์๊ธฐ๊ณ๋ ํ๋ซํผ ์ข ์์ ์ด๋ค.
5. ์๋ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ๋ฐ ์คํ
์๋ฐ ํ๋ก๊ทธ๋จ์ ๋ณดํต ์ฌ๋ฌ ์์ค ํ์ผ๋ก ๋๋์ด ์์ฑํ๋ฉฐ ์๋ฐ ์ปดํ์ผ๋ฌ๋ ๊ฐ ์์คํ์ผ์ ์ปดํ์ผํ์ฌ ํด๋์ค ํ์ผ์ ์์ฑํ๋ค. ํ์ง๋ง ์๋ฐ์์๋ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋ฌ๋ฆฌ ์ด๋ค์ ํ๋๋ก ๋ฌถ๋ ๋งํฌ ๊ณผ์ ์ด ์กด์ฌํ์ง ์๋๋ค.
๊ฐ๋ฐ์๊ฐ ์ฌ๋ฌ ํด๋์ค ํ์ผ ์ค ํ๋๋ฅผ ์ง์ ํ์ฌ ์คํ์ํค๋ฉด, JVM์ ๊ทธ ํด๋์ค ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ๊ณ ์คํํ๋ค. ์คํ ๋์ค ๋ค๋ฅธ ํด๋์ค ํ์ผ์ด๋ JDK์ ํด๋์ค ํ์ผ์ด ํ์ํ๋ฉด ํด๋น ํด๋์ค ํ์ผ์ ๋ก๋ฉํ๊ณ ์คํํ๋ค. ์ฆ, ๋ชจ๋ ํ์ผ๋ค์ ๋ก๋ฉํด๋์ ํ์๊ฐ ์์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์๊ฐ ์๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๋ฉด ๋ฏธ๋ฆฌ ๋ก๋ฉํด๋์์ ์๊ฐ์ ๋จ์ถ์ํจ๋ค.
JAVA์ ํน์ง
1. ํ๋ซํผ ๋ ๋ฆฝ์ฑ
์๋ฐ๋ ํ๋ซํผ์ ์ข ์๋์ง ์๋ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ ๋๋ฉฐ, ์๋ฐ ๊ฐ์ ๊ธฐ๊ณ๋ง ์์ผ๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์ด ๊ฐ๋ฅํ๋ค.
2. ๊ฐ์ฒด ์งํฅ
์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก ์บก์ํ, ์์, ๋คํ์ฑ์ ์ง์ํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋์ ํด๊ฒฐ ๊ณผ์ ๋ฅผ ์ค์ ์ธ์์ ๊ฐ์ฒด์ ๊ฐ์ฒด ๊ฐ์ ์ํธ ๊ด๊ณ๋ก ๋ชจ๋ธ๋งํ์ฌ ์ธ๊ฐ์ ์ฌ๊ณ ์ ๊ฐ๊น๊ฒ ํํํ๋ค.
3. ํด๋์ค๋ก ์บก์ํ
์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ์บก์ํ ์์น์ ์ฒ ์ ํ ์ง์ผ, ๋ณ์๋ ๋ฉ์๋๋ ๋ฐ๋์ ํด๋์ค ๋ด์ ๊ตฌํํ๋๋ก ํ๋ค.
4. ๋ฉํฐ ์ค๋ ๋
ํ๋์ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ๋ค์์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ค์์ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋ ์ ์๋ ํ๊ฒฝ์ ์ง์ํ๋ค.
์๋ฐ๋ ์ด์์ฒด์ ๋์ ์์ด ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
5. ๊ฐ๋น์ง ์ปฌ๋ ์
์๋ฐ ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋ ๊ธฐ๋ฅ์ ์์ง๋ง, ๋ฐํ์ ์๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ธฐ๋ฅ์ ์ํด ์๋์ผ๋ก ๋ฐํ๋๋ค.
6. ์ค์๊ฐ ์์ฉ ์์คํ ์ ๋ถ์ ํจ
์์ธกํ ์ ์๋ ์์ ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์คํ๋๋ฏ๋ก ํ๋ก๊ทธ๋จ์ด ์ผ์์ ์ผ๋ก ์ค๋จ๋ ์ ์๋ค.
7. ์์ ์ฑ
์๋ฐ ์ธ์ด๋ ํ์ ์ฒดํฌ๊ฐ ์๊ฒฉํ๋ฉฐ, ํฌ์ธํฐ์ ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋จ๋๋ ์ผ์ด ๊ฑฐ์ ์๋ค.
8. ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉ
์๋ฐ ๊ฐ์ ๊ธฐ๊ณ๊ฐ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก C/C++๋ณด๋ค ๋๋ฆฌ๋ค๊ณ ์๋ ค์ ธ์๋ค. ํ์ง๋ง ์ต๊ทผ์ ์คํํ๋ ๋์ค ์๋ฐ ํ๋ก๊ทธ๋จ์ ํด๋น CPU์ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ์ปดํ์ผํ๊ณ , CPU๊ฐ ๋ฐ๋ก ๊ธฐ๊ณ์ด๋ฅผ ์คํํ๋๋ก ํ๋ JIT ์ปดํ์ผ๋ง ๊ธฐ๋ฒ์ ์ด์ฉํ๋ฏ๋ก, C/C++๊ฐ ๋น์ทํ๋๋ก ๊ฐ์ ๋์๋ค.