ํ์ต ๋ชฉํ
์ฐ๋ฆฌ๊ฐ ์๋ฐ๋ฅผ ๋ฐฐ์ฐ๋ ๋์ ์ค์ต์๋ง ์ค์ฌ์ ๋์์ง ์ปดํจํฐ ๋ด๋ถ์ ์ผ๋ก JRE๋ ์ด๋ป๊ฒ ๋์๊ฐ๊ณ JVM์ ์ด๋์ ์คํ๋๋ฉฐ, JDK๋ ์ ์ฐ์ด๋์ง์ ๋ํด์ ํ์ตํ ๋น์ค์ด ๋งค์ฐ ์ ์๋ค. ์ด์ ์ ๋๋ก ํ ๋ฒ ์์ ๋ณด๊ณ , ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๋ฉฐ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ง๋ฅผ ํ์ตํด ๋ณด๋๊ฒ ํญํ์ด๋ค.
JRE์ JVM์ด๋ ๋ญ๊น?
JVM (Java Virtual Machine) ๊ณผ JRE (Java Runtime Environment) ์ถ๊ฐ์ ์ผ๋ก JDK (Java Development kit) ๊น์ง. ํด๋น ์๋ฏธ๋ฅผ ์ ํํ๋ ๋ชฐ๋ผ๋ Java ๊ฐ๋ฐ์๋ผ๋ฉด ํ ๋ฒ์ฏค ๋ค์ด๋ดค์ ๊ฒ์ด๋ค.
์ด๋ ๊ฐ๊ฐ
- JVM : ์๋ฐ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋๊ตฌ
- JRE : ์๋ฐ์ฉ OS
- JDK : ๊ฐ์ PC
์ ์๋ฏธํ๋ค๊ณ ์๊ณ ์๋๋ฐ ์ด๋ ๋ค ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ์๋ฐ์ ํน์ฑ์์ ๋ถํฐ ์์๋๋ค๋ ๊ฒ์ผ ๋ชจ๋๊ฐ ์ ๊ณ ์์ ๊ฒ์ด๋ค.
์ด JVM๊ณผ JRE์ ๋ํ ๋ป์ ์๊ฒ ๋์ผ๋ ์ ํํ ์ฌ์ฉ๋ฒ์ ์๊ณ ์ถ์ง๋ง ํ ๊ฐ์ง ๋ ์์์ผ ํ๋ฏ๋ก ์ ์๋ง ๊ธฐ๋ค๋ฆฌ์.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JRE์ JVM์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ดํดํ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ๋ก ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ํด์ ์์์ผ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์๋ ํฌ๊ฒ 2๊ฐ์ง์ ๊ตฌ์กฐ๊ฐ ์กด์ฌํ๋ค.
-
์ฝ๋ ์คํ ์์ญ
-
๋ฐ์ดํฐ ์์ญ
์ด๋ ๊ฒ ๋ ๊ฐ์ง์์ ๋ฐ์ดํฐ ์์ญ์ ๋ 3๊ฐ์ง๋ก ์ธ๋ถํ ๋๋๋ฐ
- ์คํํฑ ์์ญ
- ์คํ ์์ญ
- ํ ์์ญ
๊ทธ๋ ๋ค๋ฉด ์๋ง ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ธ๋ถํ๋ ์ธ ์์ญ์์ ๊ฐ์ ํ๋ ์ผ์ ๋ถ์ฌํ๋ค๋ฉด
- ์คํํฑ ์์ญ : ํด๋์ค์ ํ๋ ์์ญ
- ์คํ ์์ญ : ๋ฉ์๋์ ํ๋ ์์ญ
- ํ ์์ญ : ๋ณ์ ๋ฐ ์์ ๋ณ์๋ค์ ํ๋ ์์ญ
๊ทธ๋ ๋ค๋ฉด JRE์ JVM์ ์ด๋ป๊ฒ ์ฐ์ผ๊น?
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ์ด๋ฌํ Java ์ฝ๋๋ฅผ ์ํํ๋ค๊ณ ํด๋ณด์.
public class Post01 {
public static void main(String[] args) {
System.out.println("์๋
ํ์ธ์ฉ~~");
}
}
๊ทธ๋ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
JRE๊ฐ ํ๋ก๊ทธ๋จ ๋ด์ main()
๋ฉ์๋๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
์ฐ๋ฆฌ์ JRE ๊ฐ ๋ํ๋์ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์๋ main()
๋ฉ์๋์ ์กด์ฌ๋ฅผ ์ฐพ์ ๊ฒ์ด๊ณ , ๋ง์ฝ์ main()
๋ฉ์๋์ ์กด์ฌ๊ฐ ํ์ธ๋๋ค๋ฉด JVM์ ๋ถ๋ฅธ๋ค.
JVM์ด ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
JVM์ด ๊ฐ์ฅ ๋จผ์ ๋ถ๋ฌ๋ค์ด ์์ ํ๋ ์ผ์ ์ ์ฒ๋ฆฌ๋ผ๋ ๊ณผ์ ์ธ๋ฐ ๊ทธ ๊ณผ์ ์ ๋ํด์ ์์ธํ ์์๋ณด์.
JVM์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด์ import
๋ ํด๋์ค๋ package
๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๋๋ฐ, Static ์์ญ์ ์ถ๊ฐ์ํจ๋ค.
์ง๊ธ ์์ ์์ค์ฝ๋์์๋ System.out.println()
์ ์ฌ์ฉํ๊ธฐ ์ํด์ Java.lang
ํด๋์ค๊ฐ import ๋์๋ค. ๊ทธ๋ผ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ์ถ๊ฐ์ ์ธ import
๊ฐ ์กด์ฌํ๋์ง ํ์ธํ์ง๋ง ์ถ๊ฐ์ ์ธ import
๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์ด๊ฐ๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ import๋ ํด๋์ค๋ฅผ static ์์ญ์ ๋ฐฐ์นํ ๋ฟ ์๋๋ผ ํ๋ก๊ทธ๋จ ๋ด์ ์กด์ฌํ๋ ๋ชจ๋ ํด๋์ค๋ฅผ static์ ๋ฐฐ์น์ํจ๋ค
๋ฉ์๋๋ฅผ stack ์์ญ์ ๋ฐฐ์น ์ํจ๋ค.
์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋๋ค.
์๊น ๋ดค๋ ๊ทธ๋ฆผ์ฒ๋ผ static ์์ญ์ ํด๋์ค์ ํ๋ ์์ญ์ด๋ผ๊ณ ํ๊ณ ์ฐ๋ฆฌ๊ฐ ์คํํ๊ณ ์ถ์ ์ฝ๋์ธ System.out.println()
์ ๋ฉ์๋๋ผ๋ ๊ฒ์ ์์ง ๋ง์์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋์ ํ๋ ์์ญ์ Stack ์์ญ์ด๋ฏ๋ก ์ด๋ฅผ Stack ํ๋ ์์ ๋ง๋๋ ๊ฒ ๊น์ง๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
์ด๋ก์จ ์ฐ๋ฆฌ๋ System.out.println("์๋
ํ์ธ์")
๋ผ๋ ์ฝ๋๊ฐ ์ํ๋๋ ๊ฒ์ด๋ค.
์ด์ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ฐ์๊ณผ ํจ๊ป ์์๋ณด๋ ์ ๋ง ์ ์ตํ ์๊ฐ์ด์ง ์์๋์? ๋ค์ ์๊ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ heap ์์ญ์ ๋ํด์ ๋ง ํด๋ณผ๊ฒ์!!
๋๊ธ