์๋ฐ ์ด๋ณด์๋ฅผ ๊ดด๋กญํ๋ 6๊ฐ์ง ์๋ฐ ์์ธ
(์๋ณธ) (Java์ ์์ด ๋ ๋ค ์ฒ์์ด๋ผ ๋นํ๊ณผ ๋์์ ๋ฐ์ผ๋ฉด ๊ธฐ์ ๊ฒ์
๋๋ค)
์ด์ ๊ณผ ํ์ฌ ๋ชจ๋ ๋ค์ ํ ๋ฒ ์ค๋ช
ํด์ผ ํ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์์ธ๋ก ์ธํด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ ๋ง์ Java ์ด๋ณด์๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๋๋ ๋ค๋ฅธ ์์ Java ๊ฐ๋ฐ์๋ค๋ ์ด๋ณด์๊ฐ ์ด๋ฌํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ๋๊ธฐ ์ํด ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ ๋๋ ๋ด ๋ฐ์ ์ ์ํด ์ด ๊ธ์ ์ผ๋ค. ์ด ๊ธฐ์ฌ์ ์์ ๋กญ๊ฒ ์๊ฒฌ์ ์ ์ํ๊ฑฐ๋ ์๋ ๋ชฉ๋ก์ ์์ธ๋ฅผ ์ถ๊ฐํ์ธ์.
์ด๋ Java ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ์์ ๋๋ถ๋ถ์ ์ ๊ท Java ๊ฐ๋ฐ์๊ฐ ์ง๋ฉดํ๊ฒ ๋๋
""๋ฉ์ธ" ์ค๋ ๋์ ์์ธ NoClassDefFoundError" ์ ๊ฐ์ ๋ฉ์์ง๊ฐ ํฌํจ๋ ์์ธ ์ค ํ๋์
๋๋ค . ์ด๋ณด์๋ "Hello world!"๋ฅผ ํ์ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ๋ช
๋ น์ค๋ก ์ด๋ํ์ฌ "java ..."๋ฅผ ์
๋ ฅํ๊ณ Enter ํค๋ฅผ ๋๋ฅธ ๋ค์ BAM! =). ๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ์ด "Hello world!"๋ฅผ ์ธ์ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์๋
๋๋ค. ๋ชจ๋ํฐ์์๋ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฝ๋๋ค.
NoClassDefFoundError๋ JVM(Java Virtual Machine)์ด ์์ ์ ํด๋์ค์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ๊ณ ์ปดํ์ผ ์ ๋์ผํ ํด๋์ค๊ฐ ๋ฐ๊ฒฌ๋์์์๋ ๋ถ๊ตฌํ๊ณ ํด๋น ํด๋์ค๋ฅผ ์ฐพ์ ์ ์์ ๋ ๋ฐ์ํฉ๋๋ค. ์ด ์์ธ๋ "java" ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๊ณ ํ ๋ ํด๋์ค ๊ฒฝ๋ก๊ฐ ์ ๋๋ก ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ์์ฃผ ๋ฐ์ํฉ๋๋ค. ๋ค์์ ์ด ์์ธ๊ฐ ๋ฐ์ํ๋ ์ด์ ์ ๋ํ ์ค๋ช
์
๋๋ค.
- ํด๋์ค๋ -classpath์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- CLASSPATH ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ์ ์๋์์ต๋๋ค. Windows ๋ช
๋ น "set"์ ์ฌ์ฉํ์ฌ ์กด์ฌ ์ฌ๋ถ์ ์ ํ์ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์
์ฌ๊ธฐ์ ๋ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค.
๋ํ CLASSPATH ํ๊ฒฝ ๋ณ์์ ์ธํฐํ๋ฆฌํฐ ํค -classpath ๊ฐ์ ์ฐจ์ด์ ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ ๋ฌธ๊ฐ๋ค์ CLASSPATH ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค . ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ -classpath ํค๋ฅผ ์ธํฐํ๋ฆฌํฐ์ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค.
ClassNotFoundException์ ํ๋ก๊ทธ๋๋ฐ์ ์์ํ์๋ง์ ์ด๋ณด์์๊ฒ ์
๋ชฝ์ด ๋๋ ๋ ๋ค๋ฅธ ์์ธ์
๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ ์ผ๋ฐ Java ๊ฐ๋ฐ์๋
ClassNotFoundException๊ณผ NoClassDefFoundError ์์ธ๋ฅผ ํผ๋ํ๋ ๊ฒฝ์ฐ ๊ฐ ๋ง์ต๋๋ค . ๋ฐ๋ผ์ ์ด ๋ ๊ฐ์ง ์์ธ์ ์ฐจ์ด์ ์
์ฃผ๋์ด ์ง์ ๋ฉด์ ์์ ๊ฐ์ฅ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ ์ค ํ๋๋ก ๋จ์ ์์ต๋๋ค . ClassNotFoundException์ JVM์ด ํน์ ํด๋์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ๊ณ ํด๋์ค ๊ฒฝ๋ก์์ ํด๋น ํด๋์ค๋ฅผ ์ฐพ์ง ๋ชปํ
๋ ๋ฐ์ํฉ๋๋ค . ์๋ก์ด Java ๊ฐ๋ฐ์๊ฐ ์ฒ์์ผ๋ก ์ด๋ฅผ ์ ํ๊ฒ ๋๋ ์ผ๋ฐ์ ์ธ ์ฅ์ ์ค ํ๋๋ JDBC ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. ๊ฑฐ๊ธฐ์ Class.forName("JDBCdriver")์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ํ๋ ค๊ณ ํฉ๋๋ค. ClassNotFoundException์ ๋ํ ์ข์ ๊ธฐ์ฌ๋
์ฌ๊ธฐ์ ์์ต๋๋ค . ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์
Java ํด๋์ค๋ก๋ ์ ๊ฐ๋
์ ์ดํดํ๋ ๊ฒ ์
๋๋ค.
Win/Unix ํ๊ฒฝ์์ Java ํด๋์ค ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฝ์ ์ ์์ต๋๋ค .
Java ๋ฌธ์ ์ ๋ช
์๋ ๋๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
- Class.forName ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ๋๋ฐ .class ํ์ผ์ด ํด๋์ค ๊ฒฝ๋ก์ ์์ต๋๋ค. ์ด๋ ์ฌ๊ธฐ์ ๋์ด๋ ์ธ ๊ฐ์ง ์๋๋ฆฌ์ค ์ค ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค์
๋๋ค.
- ํด๋์ค ๋ก๋๊ฐ loadClass๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋.
- ํด๋์ค ๋ก๋๊ฐ findSystemClass๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋.
์ด ์์ธ๋ ์ฒ์ ๋ ๊ฐ๋ณด๋ค ์ด๋ณด์๊ฐ ์ดํดํ๊ธฐ ๋ ์ฝ์ต๋๋ค. ๊ฒ๋ค๊ฐ
์ด ์์ธ๋ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค . ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ์ ๋ํ ๋ฉ์์ง๋
ํด๋น ์์ธ๊ฐ ๋ฐ์ํ ํ๋ก๊ทธ๋จ์ ์ค ๋ฒํธ๋ฅผ ๋ํ๋
๋๋ค. ์ด ์์ธ๋ JVM์ด ๊ฐ์ฒด์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ๊ฑฐ๋ ๊ฐ์ฒด์ ๋ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๊ณ ์๋ํ๊ณ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๋์ null์ ์์ ํ ๋ ๋ฐ์ํฉ๋๋ค. Java ๋ฌธ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ ๋ช
์๋์ด ์์ต๋๋ค.
- ์ ํจํ์ง ์์ ๊ฐ์ฒด์ ๋ฉ์๋์ ์ก์ธ์คํ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค. (์ฆ, JVM ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๋์ null์ด ๋ฉ๋๋ค)
- ์ ํจํ์ง ์์ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. (์๋ฅผ ๋ค์ด ์ด๊ธฐํ๋์ง ์์)
- Object ์ ํ์ ์กด์ฌํ์ง ์๋ ๋ฐฐ์ด ์์์ ์ก์ธ์คํ๋ ค๊ณ ํ์ต๋๋ค. (์ฆ, ๊ฐ์ฒด ์ฐธ์กฐ ๋์ ๋ฐฐ์ด ์์์ null์ด ํฌํจ๋ ๊ฒฝ์ฐ)
์ด ์์ธ๋ฅผ ๋ฐฉ์งํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ NULL์ด ์๋ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์กฐ๋ง๊ฐ ์ด๋ Java ๊ฐ๋ฐ ๊ดํ์ด ๋์ด ๋ชจ๋ ๊ณณ์์ NULL์ด ์๋ ๊ฒ์ฌ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ๋ ๊ฒ์
๋๋ค.ํฅ๋ฏธ๋กญ๊ฒ๋
NULL์ด ์๋ ๊ฒ์ฌ๋ฅผ ๋ชจ๋ ๊ณณ์ ์ฝ์
ํ๋ ๊ฒ์ ์ข์ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๋ก ๊ฐ์ฃผ๋์ง ์์ต๋๋ค . ๊ทธ๋ฆฌ๊ณ NULL์ด ์๋ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ๊ฐ๋ฐ์๊ฐ ์คํจ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ null ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋์ , ํ๋ก๊ทธ๋๋จธ ๋ ์ค๋ฅ ๋ฐ์ ์ ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ์๋ํ ์ง์ ๋ํ ๊ธฐ๋ณธ ๋
ผ๋ฆฌ๋ก
null ๊ฐ์ด ์๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉํด์ผ ํ๋
์ข์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์
๋๋ค . ๊ทธ๋ฌ๋ ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ฑํํ๋ ๊ฒ์ ๋ณด๊ธฐ๋ณด๋ค ์ด๋ ต์ต๋๋ค.
์ฐ๋ฆฌ ๋ฆฌ์์ค์ ์ด์ ๋ํ ์ข์ ๊ธฐ์ฌ๊ฐ ์์ต๋๋ค.
์ด๋ ์ด๋ณด์์๊ฒ ์น์ํ ๋ ๋ค๋ฅธ ์์ธ๋ก, ๊ฐ์ฒด์ ํ์ ํด๋์ค๊ฐ ์๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์บ์คํ
ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด๋ ์ดํดํ๊ณ ์๋ณํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๊ณ ์์ ํ๊ธฐ ์ฝ์ต๋๋ค. ๋ฐํ์ ์ ๊ฐ์ฒด ์ ํ์ ์ ์ ์๋ ๊ฒฝ์ฐ ์ด ์์ธ๋ฅผ ๋ฐฉ์งํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์
"InstanceOf" ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ํ์ธํ๋ ๊ฒ์
๋๋ค.
์ด ์์ธ๋ ์ค๋ช
์ด ํ์ ์์ผ๋ฉฐ JVM์ด ์์(-1) ๋๋ ๋ฐฐ์ด ํฌ๊ธฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๋ ๋ฐฐ์ด ์์์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ ๋ ๋ฐ์ํฉ๋๋ค.
์ดํดํ๊ณ ์ ์ํ๊ณ ์์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค . ์๋ฅผ ๋ค์ด ๋ฃจํ๋ฅผ ์์ฑํ ๋
for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]);
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ณ ๊ธธ์ด ๋ฉ์๋๋ ์์ ์๋ฅผ ๋ฐํํ๋ฉฐ ๊ทธ ์ซ์๋ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ๋ณด๋ค 1์ด ํฌ๊ธฐ ๋๋ฌธ์ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ
for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
์ด ์์ธ๋ ๋ ์ผ๋ฐ์ ์ด๋ฉฐ ์ดํด, ์๋ณ ๋ฐ ํด๊ฒฐ์ด ๋งค์ฐ ์ฝ์ต๋๋ค. ์ด๋ JVM์ด ์กด์ฌํ์ง ์๋ ๋ฉ์๋ ๋๋ ์ ํจํ์ง ์์ ์ธ์๊ฐ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๊ณ ํ ๋ ๋ฐ์ํฉ๋๋ค.
GO TO FULL VERSION