๋ชฉ์ฐจ
Java
- Java์ ๊ฐ์ฅ ํฐ ํน์ง์ด๋ผ๊ณ ํ๋ค๋ฉด ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ธ ์ธ์ด๋ผ๋ ์ ์ ๊ผฝ์ ์ ์๊ฒ ๋ค.
- ์ด๋ ํ๋์จ์ด๋ , ์ด๋ ์ด์์ฒด์ ๋ ์๊ด์์ด ์ปดํ์ผ๋ ์ฝ๋(๋ฐ์ดํธ์ฝ๋)๊ฐ ํ๋ซํผ ๋ ๋ฆฝ์ ์ด๋ค.
- JVM(Java Virtual Machine)์ด๋ผ๋ ๊ฐ์๋จธ์ ๋ง ํ๋์จ์ด์ ์ค์น๋์ด ์๋ค๋ฉด ์ด๋ค ํ๋ซํผ์ด๋ ๋์ผํ ํ์ผ๋ก ๋์ผํ ์์ ์ ์คํํ ์ ์๋ค.

Java์ ์ปดํ์ผ๋ถํฐ ์คํ๊น์ง
์ปดํ์ผ
- ์๋ฐ๋ก ์์ฑ๋ ์์ค์ฝ๋ (.java)
- Java Compiler๊ฐ ์๋ฐ ์์คํ์ผ์ ์ปดํ์ผ โ .java ํ์ผ์์ .class ํ์ผ๋ก ๋ณํ๋จ
- .class ํ์ผ์ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๊ณ , JVM์ด ์ฝ์ ์ ์๋ค.
- .class ํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ก ์์ฑ๋์ด ์๋ค.
์คํ
- .class ํ์ผ์ JVM์ Class Loader์๊ฒ ์ ๋ฌ
- Class Loader๋ ๋์ ๋ก๋ฉ(Dynamic Loading)์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ, ๋งํฌํ์ฌ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area), ์ฆ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
- Class Loader์ ์ธ๋ถ ๋์
- ๋ก๋: .class ํ์ผ์ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
- ๊ฒ์ฆ: ์๋ฐ ์ธ์ด ๋ช ์ธ(Java Language Specification) ๋ฐ JVM ๋ช ์ธ์ ๋ช ์๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ๊ฒ์ฌ
- ์ค๋น: ํด๋์ค๊ฐ ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (ํ๋, ๋ฉ์๋, ์ธํฐํ์ด์คโฆ)
- ๋ถ์: ํด๋์ค์ ์์ ํ ๋ด ๋ชจ๋ ์ฌ๋ณผ๋ฆญ ๋ ํผ๋ฐ์ค๋ฅผ ๋ค์ด๋ ํธ ๋ ํผ๋ฐ์ค๋ก ๋ณ๊ฒฝ
- Symbolic References: ์ฐธ์กฐํ๋ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋, ์ฐธ์กฐํ๋ ๋์์ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ
- Direct References: ์ฐธ์กฐํ๋ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ
- ์ด๊ธฐํ: ํด๋์ค ๋ณ์๋ค์ ์ ์ ํ ๊ฐ์ผ๋ก ์ด๊ธฐํ (static field)
- Class Loader์ ์ธ๋ถ ๋์
- ์คํ ์์ง(Execution Engine)์ด JVM ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช
๋ น์ด ๋จ์๋ก ํ๋์ฉ ๊ฐ์ ธ์ ์คํ
- ์ด๋ ์คํ ์์ง์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์คํํจ
- ์ธํฐํ๋ฆฌํฐ(Interpreter): ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ํด์ํ๊ณ ์คํ. ํ๋ํ๋์ ์คํ์ ๋น ๋ฅด๋ ์ ์ฒด์ ์ธ ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค.
- JIT ์ปดํ์ผ๋ฌ(Just-In-Time Compiler): ์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ๋ฐฉ์์ผ๋ก, ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ณ ์ง์ ์คํํ๋ ๋ฐฉ์. ์ ์ฒด ์คํ ์๋๋ ์ธํฐํ๋ฆฌํ ๋ฐฉ์๋ณด๋ค ๋น ๋ฅด๋ค.
- ์ด๋ ์คํ ์์ง์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์คํํจ
๊ทธ๋ผ Java๋ ์ปดํ์ผ ์ธ์ด์ธ๊ฐ์?
์ ๋ ์ด ์ง๋ฌธ์ ๋๋ต์ด ๊ถ๊ธํด์ ์ด ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ธ์์ ๋ง๋งํ์ง ์๋๊ตฐ์...

์๋์ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
ํ์ด์ฌ์ ์ธํฐํ๋ฆฌํฐ์ธ์ด์ ๋๊น? ยท Wireframe
์ธ ์ค ์์ฝ
- ์ปดํ์ผ๋ฌ ์ธ์ด์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ตฌ๋ณํ๋ ๊ฒ์ ์๋ชป๋ ๊ตฌ๋ณ์ด๋ค (Java๋ ์ข์๊ฐ์ ๋์๊ฐ์์ ๋น์ทํ ์ง๋ฌธ)
- ์ต๊ทผ์ ์ธ์ด๋ค์ ์ปดํ์ผ ๋ฐฉ์๊ณผ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํผํฉํด์ ์ด๋ค (๋ํ์ ์ธ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ์๋ ค์ ธ ์๋ Python๋ JIT Compiler๋ฅผ ์ฌ์ฉํ๋ค)
- ๋ฐ๋ง ๋ง๋ค๊ณ ํ์
'๐ ๊ณต๋ถ > โ ๊ถ๊ธํด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋ฆฌ๋ ๋ฐฉํฅ ๊ทธ๋ํ์ธ๊ฐ? ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ธ๊ฐ? (1) | 2023.02.09 |
---|---|
๋ฐ์ดํธ ์ฝ๋, ๊ธฐ๊ณ์ด, ๋ฐ์ด๋๋ฆฌ ์ฝ๋, ๋ค์ดํฐ๋ธ ์ฝ๋โฆ? (1) | 2022.10.29 |
Java
- Java์ ๊ฐ์ฅ ํฐ ํน์ง์ด๋ผ๊ณ ํ๋ค๋ฉด ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ธ ์ธ์ด๋ผ๋ ์ ์ ๊ผฝ์ ์ ์๊ฒ ๋ค.
- ์ด๋ ํ๋์จ์ด๋ , ์ด๋ ์ด์์ฒด์ ๋ ์๊ด์์ด ์ปดํ์ผ๋ ์ฝ๋(๋ฐ์ดํธ์ฝ๋)๊ฐ ํ๋ซํผ ๋ ๋ฆฝ์ ์ด๋ค.
- JVM(Java Virtual Machine)์ด๋ผ๋ ๊ฐ์๋จธ์ ๋ง ํ๋์จ์ด์ ์ค์น๋์ด ์๋ค๋ฉด ์ด๋ค ํ๋ซํผ์ด๋ ๋์ผํ ํ์ผ๋ก ๋์ผํ ์์ ์ ์คํํ ์ ์๋ค.

Java์ ์ปดํ์ผ๋ถํฐ ์คํ๊น์ง
์ปดํ์ผ
- ์๋ฐ๋ก ์์ฑ๋ ์์ค์ฝ๋ (.java)
- Java Compiler๊ฐ ์๋ฐ ์์คํ์ผ์ ์ปดํ์ผ โ .java ํ์ผ์์ .class ํ์ผ๋ก ๋ณํ๋จ
- .class ํ์ผ์ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๊ณ , JVM์ด ์ฝ์ ์ ์๋ค.
- .class ํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ก ์์ฑ๋์ด ์๋ค.
์คํ
- .class ํ์ผ์ JVM์ Class Loader์๊ฒ ์ ๋ฌ
- Class Loader๋ ๋์ ๋ก๋ฉ(Dynamic Loading)์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ, ๋งํฌํ์ฌ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area), ์ฆ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
- Class Loader์ ์ธ๋ถ ๋์
- ๋ก๋: .class ํ์ผ์ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
- ๊ฒ์ฆ: ์๋ฐ ์ธ์ด ๋ช ์ธ(Java Language Specification) ๋ฐ JVM ๋ช ์ธ์ ๋ช ์๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ๊ฒ์ฌ
- ์ค๋น: ํด๋์ค๊ฐ ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (ํ๋, ๋ฉ์๋, ์ธํฐํ์ด์คโฆ)
- ๋ถ์: ํด๋์ค์ ์์ ํ ๋ด ๋ชจ๋ ์ฌ๋ณผ๋ฆญ ๋ ํผ๋ฐ์ค๋ฅผ ๋ค์ด๋ ํธ ๋ ํผ๋ฐ์ค๋ก ๋ณ๊ฒฝ
- Symbolic References: ์ฐธ์กฐํ๋ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋, ์ฐธ์กฐํ๋ ๋์์ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ
- Direct References: ์ฐธ์กฐํ๋ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ
- ์ด๊ธฐํ: ํด๋์ค ๋ณ์๋ค์ ์ ์ ํ ๊ฐ์ผ๋ก ์ด๊ธฐํ (static field)
- Class Loader์ ์ธ๋ถ ๋์
- ์คํ ์์ง(Execution Engine)์ด JVM ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช
๋ น์ด ๋จ์๋ก ํ๋์ฉ ๊ฐ์ ธ์ ์คํ
- ์ด๋ ์คํ ์์ง์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์คํํจ
- ์ธํฐํ๋ฆฌํฐ(Interpreter): ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ํด์ํ๊ณ ์คํ. ํ๋ํ๋์ ์คํ์ ๋น ๋ฅด๋ ์ ์ฒด์ ์ธ ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค.
- JIT ์ปดํ์ผ๋ฌ(Just-In-Time Compiler): ์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ๋ฐฉ์์ผ๋ก, ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ณ ์ง์ ์คํํ๋ ๋ฐฉ์. ์ ์ฒด ์คํ ์๋๋ ์ธํฐํ๋ฆฌํ ๋ฐฉ์๋ณด๋ค ๋น ๋ฅด๋ค.
- ์ด๋ ์คํ ์์ง์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์คํํจ
๊ทธ๋ผ Java๋ ์ปดํ์ผ ์ธ์ด์ธ๊ฐ์?
์ ๋ ์ด ์ง๋ฌธ์ ๋๋ต์ด ๊ถ๊ธํด์ ์ด ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ธ์์ ๋ง๋งํ์ง ์๋๊ตฐ์...

์๋์ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
ํ์ด์ฌ์ ์ธํฐํ๋ฆฌํฐ์ธ์ด์ ๋๊น? ยท Wireframe
์ธ ์ค ์์ฝ
- ์ปดํ์ผ๋ฌ ์ธ์ด์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ตฌ๋ณํ๋ ๊ฒ์ ์๋ชป๋ ๊ตฌ๋ณ์ด๋ค (Java๋ ์ข์๊ฐ์ ๋์๊ฐ์์ ๋น์ทํ ์ง๋ฌธ)
- ์ต๊ทผ์ ์ธ์ด๋ค์ ์ปดํ์ผ ๋ฐฉ์๊ณผ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํผํฉํด์ ์ด๋ค (๋ํ์ ์ธ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ์๋ ค์ ธ ์๋ Python๋ JIT Compiler๋ฅผ ์ฌ์ฉํ๋ค)
- ๋ฐ๋ง ๋ง๋ค๊ณ ํ์
'๐ ๊ณต๋ถ > โ ๊ถ๊ธํด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋ฆฌ๋ ๋ฐฉํฅ ๊ทธ๋ํ์ธ๊ฐ? ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ธ๊ฐ? (1) | 2023.02.09 |
---|---|
๋ฐ์ดํธ ์ฝ๋, ๊ธฐ๊ณ์ด, ๋ฐ์ด๋๋ฆฌ ์ฝ๋, ๋ค์ดํฐ๋ธ ์ฝ๋โฆ? (1) | 2022.10.29 |