1. ๊ฐ์
Cass Loader ๋ abstrace class๋ก์จ Bytecode๋ฅผ ์ฝ์ด ๋ค์ฌ์ class ๊ฐ์ฒด๋ฅผ ์์ฑํ๋
์ญํ์ ๋ด๋นํ๋ค.
Class Loader๊ฐ Class๋ฅผ Loadingํ๋ ์์ ์ ComplieTime์ด ์๋ Run Time์ Loading์ด ๋๋ค.
ํ๋ก๊ทธ๋๋จธ ๊ฐ SampleTest aaa = new SampleTest(); ๋ผ๋ ์ฝ๋๋ฅผ ์ฒ์ ์คํํ๋ฉด
JVM์ SampleTest๋ผ๋ Class๋ฅผ Class Loader๋ฅผ ํตํด์ SampleTest.clas์ ByteCode๋ฅผ
์ต์ด๋ก ๋ฉ๋ชจ๋ฆฌ์ Loadํ๊ฒ ๋๋ค.
2. ClassLoader ๊ธฐ์ ์ ํน์ง
- Hierarchical
Class Loader๋ Hierarchical ํ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ๊ณ , Parent class laoder์์, child class loader๋ฅผ
๊ฐ๋๊ฒ๊ณผ ๊ฐ์ด Class Loader๊ฐ์ ๊ณ์ธตํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋๋ค. ์ต์์ Class Loader๋
"bootstrap" Class Loader๊ฐ ์์น ํ๊ฒ ๋๋ค.
- Delegate load request
Class loading์๋ ์ผ์ ํ ๊ท์น์ด ํ์ํ๋ค. ์ด๋ Class Loader๊ฐ ๊ณ์ธกํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ
์๊ธฐ ๋๋ฌธ์, ์ด๋ ์์ ์ Class ๋ก๋ฉ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์์ Class Loader๊ฐ Lodingํ Class๊ฐ
์ฐ์ ๊ถ์ ๊ฐ์ง๋ค.
- Have visibility constraint
Child Class Loader๋ Parent Class Loader์ Clss๋ฅผ ์ฐพ์์ ์์ง๋ง, ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
- Cannot unload classes
Class Loader์ ์ํด์ Loading๋ Class๋ค์ unload ๋ ์๊ฐ ์๋ค.
3. Class Loader ์์
-
์ด๋ Loading์์ฒญ์ ์๋ก ์๊ฒ
์ ๋ฌ ํ๋ ClassLoader์ ๊ทธ๋ํ
์ด๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Class Loader
๋ค์ ํ๋์ delegation parent์
ํจ๊ป์์ฑ๋๊ณ ๋ค์ ์์น ์์
Class๋ฅผ ์ฐพ๋๋ค.
* ๋ค์ ์์น๋
Cache, Parent, Self
CalssLoader๊ฐ ์ต์ด ํ๋ ์ผ์
์ ์๋ ๊ฐ์ Class๋ฅผ Loading
ํ๋๋ก ์์ฒญ์ ๋ฐ์๋์ง๋ฅผ
๋จผ์ ํ์ ํ๋ค.
๋ง์ฝ ์์ฒญ์ ๋ฐ์์ ์ด ์์ผ๋ฉด,
Cache์ ์ ์ฅ๋ Class๋ฅผ
๋ฆฌํด ํ๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ,
Parent Class๋ฅผ Loading ํ
๊ธฐํ๋ฅผ ์ค๋ค.
์ด๋ฌํ ๋ ๋จ๊ณ๋ค์ด ๋ฐ๋ณต๋๊ณ Depth First ๋ฐฉ์์ผ๋ก ํ์์ด ์งํ ๋๋ค.
๋ง์ฝ Parent Class์๋ ํด๋น Class๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด (ClassNotFoundException)
ClassLoader๋ Class์ ์์ค์ ๋ํ ๊ณต์ (์์ ํ ์ฝ๋)์ ๊ฒฝ๋ก (Self)๋ฅผ ๊ฒ์ํ๋ค.
Parent ClassLoader๋ Class๋ฅผ ์ฒ์์ผ๋ก loadingํ ๊ธฐํ๊ฐ ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์ Root์
๊ฐ์ฅ ๊ฐ๊น์ด ClassLoader์ ์ํด ๋ก๋ฉ ๋๋ค.
๊ฐ์ฅ ํต์ฌ์ ์ธ bootstrap class๋ค์ java.lang.Object๊ฐ์ ์ ํํ ํด๋์ค ๋ฒ์ ์ด ๋ก๋ฉ๋์๋์ง๋ฅผ
ํ์ธํ๊ณ , Class Loader๊ฐ ๊ทธ ์์ฒด ๋๋ ๋ถ๋ชจ(Parent)์ ์ํด์ Loading ๋์๋์ง๋ฅผ
Class๊ฐ ๋ถ ์ ์๋๋ก ํ๋ค. ์์์ ๋งํ๋ค ์ถ์ด ์์์ ์ํด Loading๋ Class ๋ค์ ๋ณผ ์ ์๋ค.
- Bootstrap Class Loader
๋ค๋ฅธ ClassLoader๋ค๊ณผ๋ ๋ฌ๋ฆฌ Bootstrap Class Loader ๋ ์๋ฐ ์ฝ๋์ ์ํด์
instanceํ ๋ ์ ์๋ค.
Bootstrap ClassLoader ๋ Boot ClassPath์์ ํต์ฌ ์์คํ Class๋ค์ ๋ก๋ฉํ๋๋ฐ
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก JavaHome์ jre/lib ๋๋ ํ ๋ฆฌ์ ์๋ JAR ํ์ผ๋ค์ด๋ค.
๋จ -Xbootclasspath ์ต์ ์ผ๋ก classpath๋ฅผ ์ถ๊ฐ ์์ ํ ์ ์๋ค.
- Extension Class Loader
์ฃผ๋ก jre/lib/ext ๋๋ ํ ๋ฆฌ์ ์์นํ Extension ๋๋ ํ ๋ฆฌ์์ Class ๋ค์ Loading ํ๋ค.
์ฌ์ฉ์์ classpath๋ฅผ ์์ ํ์ง ์๊ณ ๋ค์ํ ๋ณด์ ํ์ฅ ๊ฐ์ ์๋ก์ด ํ์์ผ๋ก ์ฝ๊ฒ
๊ฐ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต ํ๋ค.
- System Class Loader
CLASSPATH ํ๊ฒฝ ๋ณ์์ ์ง์ ๋ ๊ฒฐ๋ก์์ ์ฝ๋๋ฅผ ๋ก๋ฉ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด Class Loader๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ๋ชจ๋ ClassLoader์ Parent ์ด๋ค.
4. Class Loding ๋จ๊ณ
- Class Loadig์ Loading, Linking, initialzing ๋จ๊ณ๋ก ๋๋์ด ์ง๋ค.
- ๋๋ถ๋ถ์ Class Loading๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ ์ด ์ธ๋จ๊ณ ์ค ํ ๋จ๊ณ์์ ๋ฐ์ํ๋ค.
- ๋ก๋ฉ ๋จ๊ณ๋ ํ์ํ Class File์ ๋ฐฐ์นํ๊ณ ByteCode๋ก Loadingํ๋ ๋จ๊ณ ์ด๋ค.
- JVM์ ๋ก๋ฉ ํ๋ก์ธ์ค๋ Class ๊ฐ์ฒด์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
๋ฉ์๋, ํ๋, ๊ธฐํ ์ฐธ์กฐ Class ๋ค์ด ์ด ๋จ๊ณ์์๋ ๋ค๋ฃจ์ด์ง์ง ์๋๋ค.
- Linking์ ์ธ ๋จ๊ณ ์ค์์ ๊ฐ์ฅ ๋ณต์กํ ๋จ๊ณ์ด๋ค. ๋ค๋ฆ๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ ์ฃผ์ ๋จ๊ณ๋ค๋ก ๋๋๋ค.
ใฑ. ByteCode ํ์ธ - ByteCode๊ฐ ์ ์์ ์ผ๋ก ์๋ ํ๋์ง ํ์ธ ํ๋ค.
ใด. Class Preparation - Class ์์ ์ ์๋ ํ๋, ๋ฉ์๋, ์ธํฐํ์ ๋ค์ ๋ํ๋ด๋
๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๋นํ๋ค.
ใท. Resolving - Class ์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฐธ์กฐ๋ ๋ชจ๋ Class๋ค์ Loadingํ๋ค.
- super class, interface, fild, method signature, local fild
- initialize ๋จ๊ณ ๋์, Class ๋ด์ ํฌํจ๋ ์ ์ initializer๋ค์ด ์คํ๋๋ค. ์ด ๋จ๊ณ์ ๋์ ๊ฐ์๋
๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๋ค.
- ์ด ์ธ ๋จ๊ณ๋ฅผ ์ง๋๋ฉด Class๋ ์์ ํ ๋ก๋ฉ๋๊ณ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋ค.
Class Loading์ Lazy๋ฐฉ์์ผ๋ก ์ํ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ Class Loading Processor ๋
Loading ์์ ์ธ์ ์ฒ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ์ํ๋ ์๋ ์๋ค.
5. Explicit Loading vs Implicit Loading
- ํด๋์ค๊ฐ ๋ก๋ฉ๋๋ ๋๊ฐ์ง ๋ฐฉ์์ ์ฐจ์ด
- Explicit : ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋ ํธ์ถ๋ค ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ฉ๋ ๋ ๋ฐ์ํ๋ค.
- (java.lang.ClassLoader).loadClass()
- Class.forName()
- ์ด๋ฌํ ๋ฉ์๋๋ค ์ค ํ๋๊ฐ ํธ์ถ ๋๋ฉด ์ด๋ฆ์ด ์ธ์๋ก ์ง์ ๋ ํด๋์ค๊ฐ ํด๋์ค ๋ก๋์ ์ํด์
๋ก๋ฉ๋๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ, ๋ก๋๋ ํด๋์ค๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํด delegation model์ ์ฌ์ฉํ๋ค.
- Implicit : Class ๊ฐ ๋ ํผ๋ฐ์ค, ์ธ์คํด์คํ, ๋ช ์์ ๋ฉ์๋ ํธ์ถ์ ์ ์ธํ ์์์ ๊ฒฝ์ฐ ๋ก๋ฉ๋๋ ๋ฐฉ์
์ด ๊ฒฝ์ฐ ์ฌ๊ทธ๋จธ๋ ๋ก๋ฉ์์ ์ ์ด๊ธฐํ๋๊ณ JVM์ ํ์ํ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฒฐ์ ํ์ฌ
๋ง์ฝ ๋ก๋ฉ์ด ๋์ด ์์ผ๋ฉด ๋ ํผ๋ฐ์ค๋ง ๋ฆฌํด๋๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ธ๋ฆฌ๊ฒ์ด์ ๋ชจ๋ธ์
์ฌ์ฉํ์ฌ ํด๋์ค๋ฅผ ๋ก๋ฉํ๊ฒ ๋๋ค.
์ฐธ๊ณ ์๋ฃ:
http://www.ibm.com/developerworks/java/library/j-dclp1/index.html?S_TACT=105AGX02&S_CMP=EDU
๋ฐ ์ธํฐ๋ท ๋ฌธ์
์ถ์ฒ : http://liebus.tistory.com/30
'๐ป Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก์ ํธ ํ์ฌ ๊ฒฝ๋ก ์ป๊ธฐ ( Getting current working directory ) (0) | 2016.06.15 |
---|---|
์๋ฐ ๊ฐ์ฒด๋ฅผ byte[] ๋ก ๋ณํํ๊ธฐ (0) | 2015.08.08 |
[ Java / ์๋ฐ ] ์์คํ ๋ ๋ฆฝ์ ์ธ ๋ผ์ธ ๊ตฌ๋ถ์ (0) | 2015.04.27 |
[ Java / ์๋ฐ ] ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ ๊ตฌํ๊ธฐ (0) | 2015.04.27 |
[Java] ์๋ฐ๋ก ๋ง๋ ๊ตฌ๊ตฌ๋จ ์์ค (0) | 2015.04.27 |