๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web Application

Java ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ๋ฒจ ์ดํ•ด

by ํ–‰๋ฑ 2021. 8. 29.

#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

๋Œ“๊ธ€