ClassLoader
- JVM์์ ๋์ํ๋ ๋ชจ๋ Class๋ค์ ์ฐธ์กฐ๋๋ ์๊ฐ ๋์ ์ผ๋ก Load ๋ฐ Link๊ฐ ์ด๋ฃจ์ด์ง๋ค.
- ClassLoader๋ ํด๋์ค๋ค์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ ์ฑ
์์ ๊ฐ์ง๊ณ ์๋ค.
Class Load ๋ฐฉ์์ ๋ํด
- Load Time Dynamic Loading
- ํ๋์ ํด๋์ค๋ฅผ ๋ก๋ฉํ๋ ๊ณผ์ ์์ ํ์ํ ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ๋ฒ์ ๋ก๋ฉํ๋ ๊ฒ์ ๋งํ๋ค.
- Run Time Dynamic Loading
- Reflection๊ณผ ๊ฐ์ ์ค์ ๋ก ๋ฉ์๋๊ฐ ์คํ๋ ๋ ๋ก๋ฉํ๋ ๊ฒ์ ๋งํ๋ค.
ClassLoader ๊ณผ์ ์ ๋ํด

Loading
- ํด๋์ค ๋ก๋๊ฐ .class ํ์ผ์ ์ฝ๊ณ , ๊ทธ ๋ด์ฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๊ณ ๋ฉ์๋ ์์ญ์ ์ ์ฅํ๋ ํ์
- Loadingํ๋ฉด์ JVM ์คํ์ด ๋ง๋์ง ํ์ธ
- Java Version ํ์ธ
Linking
- ์ด ์ธ ๋จ๊ณ๋ก ๋๋ ์ ธ ์๋ค.
- Verify
- JVM์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ํํ์ธ์ง๋ฅผ ๊ฒ์ฆํ๋ ์์
- ํด๋น ๋น์ฉ์ด ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ต์
์ ํตํด Disabled ํ ์ ์๋ค.
- -Xverify:none ์ต์
์ผ๋ก ๋ ์ ์์.
- Preparation
- Type์ด ํ์๋ก ํ๋ Memory๋ฅผ ํ ๋นํด ์ฃผ๋ ์์
- Resolution
- ์ฌ๋ณผ๋ฆญ ๋ฉ๋ชจ๋ฆฌ ๋ ํผ๋ฐ์ค๋ฅผ ๋ฉ์๋ ์์ญ์ ์๋ ์ค์ ๋ ํผ๋ฐ์ค๋ก ๊ต์ฒดํ๋ค. ์ด ๊ณผ์ ์ Optional์ด๋ค.
- Constant Pool์ Symbolic Reference๋ฅผ Direct Reference, ์ฆ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ๋ ์์
์ ์๋ฏธ
Initialization
- Static ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ค. (static ๋ธ๋ญ์ด ์๋ค๋ฉด ์ด๋ ์คํ๋๋ค.)
- SuperClass ์ด๊ธฐํ๋ฅผ ์งํํ๋ค.
- SuperClass๋ฅผ ์ด๊ธฐํํ ํ ํด๋น Class์ ์ด๊ธฐํ๋ฅผ ์งํํ๋ค.
ClassLoader ์ข
๋ฅ
- ํด๋์ค ๋ก๋๋ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ด๋ค์ ธ ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๊ฐ์ง ํด๋์ค ๋ก๋๊ฐ ์ ๊ณต๋๋ค.
- Bootstrap ClassLoader
- ์ต์์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํด๋์ค ๋ก๋
- jre/lib/rt.jar์ ๋ก๋ฉํ๋ค.
- ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๊ตฌํ๋์ด ์๋ค.
- Extension ClassLoader
- jre/lib/ext์ ํฌํจ๋ ํด๋์ค ํ์ผ์ ๋ก๋ฉํ๋ค.
- Application ClassLoader
- ์ ํ๋ฆฌ์ผ์ด์
ํด๋์คํจ์ค(์ ํ๋ฆฌ์ผ์ด์
์คํํ ๋ ์ฃผ๋ -classpath ์ต์
๋๋ java.class.path ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ํด๋นํ๋ ์์น)์์ ํด๋์ค๋ฅผ ์ฝ๋๋ค.
ClassLoader Principle
- Delegation
- ํด๋์ค๋ก๋ฉ ์์
์ ์์ ํด๋์ค๋ก๋์ ์์ํ๋ค.
- Visibility
- ํ์ ํด๋์ค๋ก๋๋ ์์ ํด๋์ค๋ก๋์ ๋ด์ฉ์ ๋ณผ ์ ์์ง๋ง ๋ฐ๋๋ก๋ ๋ณผ ์ ์๋ค.
- Tomcat ClassLoading
- Uniquesness
- ํ์ ํด๋์ค๋ก๋๋ ์์ ํด๋์ค๋ก๋๊ฐ ๋ก๋ฉํ ํด๋์ค๋ฅผ ๋ค์ ๋ก๋ฉํ์ง ์๊ฒ ํด์ ๋ก๋ฉ๋ ํด๋์ค์ ์ ์ผ์ฑ์ ๋ณด์ฅํ๋ค.
ํ์ธํด๋ณด์
java -verbose:class HelloWorld
ClassLoader๊ด๋ จ Quiz
์ ํด๋์ค ๋ก๋๋ค์ ์ฌ๋ฌ๊ฐ์ฌ์ผ ํ๋๊ฐ?
Java9์ ClassLoader ๋ณํ
Reference