#JDK #JRE #JVM #ํด๋์ค #๊ฐ์ฒด #ํด๋์ค๋ฉค๋ฒ #๊ฐ์ฒด๋ฉค๋ฒ #static #stack #heap
Java ๊ตฌ๋ ๊ณผ์ : JDK, JRE, JVM
- ์คํํ๊ฒฝ (OS/HW์ ์กฐํฉ) ์ ๊ด๊ณ ์์ด ํ๋์ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ํ๋์ ์ค๋ธ์ ํธ ํ์ผ๋ก ์ปดํ์ผ๋๋ค. (Write Once Use Anywhere)
- ์คํํ๊ฒฝ์ ๋ง๋ JRE๋ฅผ ์ค์นํ๋ฉด ์ค๋ธ์ ํธ ํ์ผ์ ์คํ ๊ฐ๋ฅํ๋ค. (๊ทธ๋ฆผ ์ 2๊ฐ์ JRE๋ ์คํํ๊ฒฝ ๋ณ JRE๋ฅผ ์๋ฏธ)
- JDK๋ ์ปดํ์ผ๋ฌ (javac.exe) ๋ฅผ ํฌํจํ๋ฉฐ, JRE๋ ์คํ๊ธฐ (java.exe) ๋ฅผ ํฌํจํ๋ค.
- JDK๋ฅผ ํตํด ์ปดํ์ผ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ JVM ์์์ JVM์ OS์ธ JRE์ ์ํด ๊ตฌ๋๋๋ค.
- ํธ์์ JDK ⊃ JRE ⊃ JVM ์ ํํ๋ก ๋ฐฐํฌ๋๋ค.
- JDK๋ฅผ ์คํํ๊ฒฝ ๋ณ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ค: https://www.oracle.com/kr/java/technologies/javase-jdk11-downloads.html
ํด๋์ค์ ๊ฐ์ฒด
- ํด๋์ค = ๋ถ๋ฅ (๊ฐ์ ํน์ฑ์ ์ง๋ ์ฌ๋ฌ ๊ฐ์ฒด์ ์ด์นญ)
Instantiation ↓ ↑ Abstraction
- ๊ฐ์ฒด = ์ค์ฒด (์ ์ผ๋ฌด์ดํ ์ฌ๋ฌผ)
Mouse mickey = new Mouse();
// ์ข๋ณ: Mouse ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๋ณ์ mickey๋ฅผ ๋ง๋ค์ด stack ์์ญ์ ๋ฐฐ์นํ๋ค.
// ์ฐ๋ณ: Mouse ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด heap ์์ญ์ ๋ฐฐ์นํ๋ค. (Mouse ํด๋์ค์ ์์ฑ์ ํธ์ถ)
// ๋์
: heap ์์ญ์ ๋ง๋ Mouse ๊ฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐ ๋ณ์ mickey์ ๋์
ํ๋ค.
ํด๋์ค ๋ฉค๋ฒ์ ๊ฐ์ฒด ๋ฉค๋ฒ
- ํด๋์ค ๋ฉค๋ฒ = ์ ์ ๋ฉค๋ฒ
: static ํค์๋๊ฐ ๋ถ์ด์์ผ๋ฉฐ, ํด๋น ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ค.
: ์ต์ด JVM ๊ตฌ๋ ์ static ์์ญ์ ํ ๋น๋๋ฉฐ ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ์ ๊ด๊ณ ์์ด ์ฌ์ฉํ ์ ์๋ค.
- ๊ฐ์ฒด ๋ฉค๋ฒ = ์ธ์คํด์ค ๋ฉค๋ฒ
: static ํค์๋๊ฐ ์์ผ๋ฉฐ, ๊ฐ ๊ฐ์ฒด๊ฐ ๋ณ๋์ ์ ์ฅ ๊ณต๊ฐ์ ๋ค๋ฅธ ๊ฐ์ ์ ์ฅํ๋ค.
: ํด๋์ค๊ฐ static ์์ญ์ ํ ๋น๋ ๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ์ง ์๊ณ ์ด๋ฆ๋ง ๊ฐ์ง๊ณ ์๋ค๊ฐ, ์ค์ ๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ heap ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๋ค.
(๊ฐ์ฒด์ ํน์ฑ์ด ์๋ ํด๋์ค์ ํน์ฑ์ด๋ผ๋ฉด ๋งค๋ฒ heap์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์ง ์๊ณ static์ 1๋ฒ๋ง ์ก๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๋ ์ธก๋ฉด์์๋ ์ดํดํ ์ ์๋ค.)
public class Mouse {
String name; // ๊ฐ์ฒด ๋ฉค๋ฒ
int age; // ๊ฐ์ฒด ๋ฉค๋ฒ
static int countOfTail = 1; // ํด๋์ค ๋ฉค๋ฒ
...
}
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ: code/data(static)/stack/heap
1. code
- ์ปดํ์ผ๋ ์ฝ๋ ์ ์ฅ ์์ญ์ด๋ค.
2. data(static)
- main() ๋ฉ์๋ ์์ ์ ์ ๋ชจ๋ ํด๋์ค๋ค๊ณผ ์ํฌํธ๋ ํจํค์ง๊ฐ ๊ฐ์ฅ ๋จผ์ static ์์ญ์ ํ ๋น๋๋ค. main() ๋ฉ์๋ ์ข ๋ฃ ์ ๊น์ง ๊ณ์ ์์ฃผํ๋ค.
- ํด๋์ค ๋ฉค๋ฒ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ผ๋ฉฐ ๊ฐ์ฒด ๋ฉค๋ฒ๋ ์ด๋ฆ๋ง ๊ฐ์ง๊ณ ์๋๋ค.
3. stack
- ์ต์ด static ์์ญ ํ ๋น ํ main() ๋ฉ์๋ ์คํ ํ๋ ์์ด stack ์์ญ์ ํ ๋น๋๋ ๊ฒ๋ถํฐ ์์ํ๋ค.
- (ํด๋์ค๋ฅผ ๋ง๋๋ ์ค๊ดํธ ์ธ์) ์ฌ๋ ์ค๊ดํธ๋ง๋ค stack ์์ญ์ ์คํ ํ๋ ์์ด ํ ๋น๋๋ฉฐ ๋ซ๋ ์ค๊ดํธ์์ ์ ๊ฑฐ๋๋ค.
- ๋ฉ์๋๋ฅผ ์ด ๋ โท ๋ฉ์๋ ์คํ ํ๋ ์ / ๋ฉ์๋ ๋ด์์ ์ ์ด๋ฌธ์ ์ด ๋ โท ๋ธ๋ญ ์คํ ํ๋ ์
- ์คํ ํ๋ ์ ๋ด์ ์ ์ ํ ๋ณ์๊ฐ ํ ๋น๋๋ค: ์ง์ญ ๋ณ์ (Local variable)
- ๋ฉ์๋ ์คํ ํ๋ ์์ ๊ฒฝ์ฐ ๋ฆฌํด๊ฐ๊ณผ ํ๋ผ๋ฏธํฐ๊ฐ์ ์ ์ฅํ๋ ๊ณต๊ฐ์ด ๊ฐ์ฅ ๋จผ์ ์๊ธด๋ค. (๋ฉ์๋ ์คํ ํ๋ ์์ ์ ๊ฑฐ๋๊ธฐ ์ง์ ๋ฆฌํด๊ฐ์ caller์๊ฒ ์ ๋ฌํ๋ค: Call by value)
- (๋น์ฐํ) ๋ด๋ถ→์ธ๋ถ ์คํ ํ๋ ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ ์ธ๋ถ→๋ด๋ถ๋ ๋ถ๊ฐ๋ฅํ๋ค. ๋ ๋ฆฝ๋ ์คํ ํ๋ ์์๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ๋ค.
4. heap
- ๊ฐ์ฒด ์์ฑ ์๋ง๋ค heap ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๋ค.
- ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๊ฐ ์๋ค๋ฉด Garbage Collector๊ฐ ์๊ฑฐํ๋ค. (์ ์์ ์์ mickey = null์ด ๋๋ค๋ฉด)
โป ์ฆ ๋ณ์๋ ์๋ 3๊ฐ์ง ํ์ ์ผ๋ก ์๊ฐํ ์ ์๋ค.
- static ์์ญ์ ํ ๋น๋๋ ํด๋์ค ๋ฉค๋ฒ ๋ณ์ (= ์ ์ ๋ณ์)
- heap ์์ญ์ ํ ๋น๋๋ ๊ฐ์ฒด ๋ฉค๋ฒ ๋ณ์ (= ์ธ์คํด์ค ๋ณ์)
- stack ์์ญ์ ํ ๋น๋๋ ์ง์ญ ๋ณ์
โป stack์ Compile time์, heap์ Runtime์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
Reference
์คํ๋ง ์ ๋ฌธ์ ์ํ ์๋ฐ ๊ฐ์ฒด ์งํฅ์ ์๋ฆฌ์ ์ดํด / ๊น์ข ๋ฏผ (~107p)
'Web Application' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ๋ชจ๋ฅด๋ ๋ด์ฉ (0) | 2021.09.12 |
---|---|
Java ๊ฐ์ฒด ์งํฅ (0) | 2021.08.29 |
์น์๋น์ค Architecture (Web server, WAS, DB server) (1) | 2021.05.16 |
์์ค4 - HTML, CSS, JS, JSP (0) | 2021.05.02 |
Links (0) | 2021.04.24 |
๋๊ธ