์ž๋ฐ”๋Š” OS์— ๋…๋ฆฝ์ ์ธ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
JVM์ด OS์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‚ฌ์ด์—์„œ ๊ธฐ๊ณ„์–ด๋กœ ํ–‰์„์•ป์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

JVM JAVA Virtual Machine

์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜

์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹  

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ GC๋ฅผ ์ˆ˜ํ–‰

 

์ž๋ฐ” ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ณผ์ •

1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

2. ( .java ) ์ธ ํŒŒ์ผ์„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

3. ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ JVM์˜ Class Loader์— ์ „๋‹ฌํ•œ๋‹ค. 

4. Class Loader๋Š” ๋™์  ๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•„์š” ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ ๋ฐ ๋งํฌํ•˜์—ฌ Runtime Data Area์— ์˜ฌ๋ฆฐ๋‹ค. (JVM์˜ ๋ฉ”๋ชจ๋ฆฌ)

5. ์‹คํ–‰ ์—”์ง„์€ JVM๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

 

 

JVM
Class Loader + Runtime Data Areas + Execution Engine

 

 

 

 

Class Loader ํŠน์ง•

1. ๊ณ„์ธต ๊ตฌ์กฐ 

ํด๋ž˜์Šค ๋กœ๋”๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ๋กœ๋”๋ผ๋ฆฌ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ์–ด ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

 

  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋” Bootstrap Class Loader
    • ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋”, ์œ ์ผํ•˜๊ฒŒ JAVA๊ฐ€ ์•„๋‹Œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„
    • JVM์ด ์‹คํ–‰๋  ๋•Œ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ
    • Object ํด๋ž˜์Šค๋ฅผ ๋น„๋กฏํ•˜์—ฌ JAVA API๋“ค์„ ๋กœ๋“œํ•จ

 

  • ์ต์Šคํ…์…˜ ํด๋ž˜์Šค ๋กœ๋” Extension Class Loader
    • ๊ธฐ๋ณธ JAVA API๋ฅผ ์ œ์™ธํ•œ ํ™•์žฅ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ - ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ํ™•์žฅ ๊ธฐ๋Šฅ ๋กœ๋“œ

 

  • ์‹œ์Šคํ…œ ํด๋ž˜์Šค ๋กœ๋” System Class Loader
    • (๋ถ€ํŠธ ์ŠคํŠธ๋žฉ๊ณผ ์ต์Šคํ…์…˜ ํด๋ž˜์Šค๋กœ๋”๊ฐ€ JVM ์ž์ฒด์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋กœ๋“œํ•œ๋‹ค) ์‹œ์Šคํ…œ ํด๋ž˜์Šค ๋กœ๋”๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ $CLASSPATH ๋‚ด์˜ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ

 

  • ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๋กœ๋” User-Defined Class Loader
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ ์ƒ์—์„œ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋กœ๋”
    • WAS์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๋กœ๋”๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋กœ๋”์˜ ์œ„์ž„ ๋ชจ๋ธ์„ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•จ

 

2. ์œ„์ž„๋ชจ๋ธ 

์ฒ˜์Œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋„˜๊ฒจ๋ฐ›์€ ํด๋ž˜์Šค๋กœ๋”.

ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•  ๋•Œ ํ˜น์€ ์‹คํ–‰ ์—”์ง„์—์„œ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํด๋ž˜์Šค ๋กœ๋”์—๊ฒŒ ๋กœ๋“œ๋ฅผ ์š”์ฒญํ•  ๋•Œ.

๋กœ๋“œ๋ฅผ ์š”์ฒญ๋ฐ›์€ ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋‹ค์Œ ์ˆœ์„œ๋Œ€๋กœ ์š”์ฒญ๋ฐ›์€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•จ

  1. ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ
  2. ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”
  3. ์ž๊ธฐ ์ž์‹ 

์ด์ „์— ๋กœ๋“œ๋œ ํด๋ž˜์Šค์ธ์ง€ ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

์—†๋‹ค๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ™•์ธํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์˜ฌ๋ผ๊ฐ€๋Š” ๋„์ค‘์— ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋”๋ผ๋„ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”(์ตœ์ƒ๋‹จ ๋กœ๋”)๊นŒ์ง€ ํ™•์ธ์„ ํ•ด์„œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”์—๋„ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

3. ๊ฐ€์‹œ์„ฑ ์ œํ•œ

ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค ๋กœ๋“œ๋ฅผ ์š”์ฒญ๋ฐ›์•˜์„ ๋•Œ ์œ„์ž„ ๋ชจ๋ธ์— ์˜ํ•ด์„œ ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์—†์œผ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด๋•Œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํŠน์„ฑ์ด ๋ฐ”๋กœ ๊ฐ€์‹œ์„ฑ ์ œํ•œ์ด๋‹ค.

 

 

4. ์–ธ๋กœ๋“œ ๋ถˆ๊ฐ€

ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋กœ unloadํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

5. ์ด๋ฆ„ ๊ณต๊ฐ„

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋Š” ๊ฐ ํด๋ž˜์Šค ๋กœ๋”๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์œผ๋กœ ๋กœ๋“œ๋œ ํด๋ž˜์Šค๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ณต๊ฐ„

์œ„์ž„ ๋ชจ๋ธ์„ ํ†ตํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋“ค์„ ํ™•์ธํ•ด์•ผํ•  ๋•Œ ํ™•์ธํ•˜๋Š” ๊ณต๊ฐ„์ด ๋ฐ”๋กœ ์ด๋ฆ„ ๊ณต๊ฐ„

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ๋ณด๊ด€๋˜๋Š” ๊ธฐ์ค€์€ FQCN Fully Qualified Class Name ์œผ๋กœ ํŒจํ‚ค์ง€ ๋ช…๊นŒ์ง€ ํฌํ•จ๋˜์–ด์žˆ๋Š” ์‹๋ณ„์ž๋ฅผ ๋œปํ•œ๋‹ค.

 

๊ฐ๊ฐ์˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๊ฐ์ž ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— FQCN์ด ๊ฐ™์€ ํด๋ž˜์Šค๋ผ๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๊ฐ–์ฃผํ•œ๋‹ค. ( ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋กœ๋“œํ•œ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์–ธ๋กœ๋“œ์˜ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. )

 

 

ํด๋ž˜์Šค ๋กœ๋“œ ๊ณผ์ • 

 

1. ๋กœ๋“œ - ํด๋ž˜์Šค ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•œ๋‹ค.

2. ๊ฒ€์ฆ - ํด๋ž˜์Šค ๋กœ๋“œ ์ „ ๊ณผ์ • ์ค‘์—์„œ ๊ฐ€์žฅ ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๊ณผ์ •์œผ๋กœ, ์ฝ์–ด๋“ค์ธ ํด๋ž˜์Šค๊ฐ€ ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ ๋ฐ JVM ๋ช…์„ธ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

3. ์ค€๋น„ - ํด๋ž˜์Šค๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. 

4. ๋ถ„์„ - ํด๋ž˜์Šค์˜ ์ƒ์ˆ˜ ํ’€ ๋‚ด ๋ชจ๋“  ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋‹ค์ด๋ ‰ํŠธ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

5. ์ดˆ๊ธฐํ™” - ํด๋ž˜์Šค ๋ณ€์ˆ˜๋“ค์„ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (static ํ•„๋“œ๋“ค์€ ์„ค์ •๋œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” )

 

 

 

 

 

 

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ Runtime Data Area

JVM์ด OS ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ํ• ๋‹น๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๋ฐ”๋กœ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์ด๋‹ค.

์ด ์˜์—ญ์€ ํฌ๊ฒŒ 5๊ฐ€์ง€, ์„ธ๋ถ„ํ™”์‹œ 6๊ฐ€์ง€๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

PC ๋ ˆ์ง€์Šคํ„ฐ, JVM ์Šคํƒ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋˜๊ณ  

ํž™, ๋ฉ”์„œ๋“œ ์˜์—ญ์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

  • PC ๋ ˆ์ง€์Šคํ„ฐ 
    • Program Counter ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•จ
  • JVM ์Šคํƒ 
    • ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ
    • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ printStackTrace( ) ๋ฉ”์„œ๋“œ๋กœ ๋ณด์—ฌ์ฃผ๋Š” Stack Trace์˜ ๊ฐ ๋ผ์ธ ํ•˜๋‚˜๊ฐ€ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ํ‘œํ˜„ํ•จ
    • ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•จ
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ
    • ์ž๋ฐ” ์™ธ์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์Šคํƒ
    • JAVA Native Interface๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋Š” C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์œผ๋กœ, ์–ธ์–ด์— ๋งž๊ฒŒ ์Šคํƒ ์ƒ์„ฑ
  • ํž™
    • ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • Garbage Collection์˜ ๋Œ€์ƒ
    • JVM ์„ฑ๋Šฅ ๋“ฑ์˜ ์ด์Šˆ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ๊ณต๊ฐ„
    • ํž™ ๊ตฌ์„ฑ ๋ฐฉ์‹์ด๋‚˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋ฐฉ๋ฒ• ๋“ฑ์€ JVM ๋ฒค๋”๋“ค์˜ ์žฌ๋Ÿ‰
  • ๋ฉ”์„œ๋“œ ์˜์—ญ 
    • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ
    • JVM์ด ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.
    • JVM์ด ์ฝ์–ด ๋“ค์ธ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€, ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด, static ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ณด๊ด€ํ•จ
  • ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€
    • JVM ๋™์ž‘์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณณ
    • ๊ฐ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ ˆํผ๋Ÿฐ์Šค๊นŒ์ง€ ๋‹ด๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”
    • ์–ด๋–ค ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ JVM์€ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ƒ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„์„œ ์ฐธ์กฐํ•œ๋‹ค.

 

 

 

 

 

์‹คํ–‰ ์—”์ง„ Execution Engine

์‹คํ–‰ ์—”์ง„์€ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰

 

๋ฐ”์ดํŠธ ์ฝ”๋“œ์™€ ๊ฐ ๋ช…๋ น์–ด๋Š” 1๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ OpCode์™€ ์ถ”๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์ด๋ค„์ ธ์žˆ์Œ

์‹คํ–‰ ์—”์ง„์€ ํ•˜๋‚˜์˜ OpCode๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ OpCode๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

์ด ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ์‹คํ–‰ ์—”์ง„์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋Š”๋ฐ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ 
    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํ•ด์„์€ ๋น ๋ฅด์ง€๋งŒ ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง„๋‹ค. 
    • JVM ์•ˆ์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • JIT ์ปดํŒŒ์ผ๋Ÿฌ Just-In-Time
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋ฐฉ์‹
    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹
    • ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๋Š” ์ธํ„ฐํ”„๋ฆฌํŒ…๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฅด๋‹ค ( ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ์บ์‹œ์—์„œ ๋ฐ”๋กœ ๊บผ๋‚ด์–ด ์‹คํ–‰ํ•ด ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค )
    • ํ•˜์ง€๋งŒ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— JVM์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ˜ธ์ถœ๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ , ์ผ์ • ๊ธฐ์ค€์„ ๋„˜์—ˆ์„ ๋•Œ๋งŒ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ ํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

 

 


์ฐธ์กฐ

์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ = ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

OOP
Object Oriented Programming
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

 

 

๊ฐ์ฒด๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ๋Œ€์ƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์–ด

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ ๊ฐœ์ธ ํ•œ ๋ช… ํ•œ ๋ช…์„ ๋ชจ๋‘ ๊ฐ์ฒด๋ผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฑ… ํ•œ ๊ถŒ ํ•œ ๊ถŒ์„ ๊ฐ์ฒด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํด๋ž˜์Šค

์‚ฌ๋žŒ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ™์€ ์†์„ฑ๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์†์„ฑ์ด๋ž€ ๋ˆˆ, ์ฝ”, ์ž…, ์†, ๋ฐœ, ๋“ฑ์˜ ์‹ ์ฒด๋“ค์„ ์˜๋ฏธํ•œ๋‹ค.

์‚ฌ๋žŒ๊ฐ™์€ ๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ–๋Š” ์†์„ฑ๋“ค์„ ๋ชจ์•„์„œ ์ •์˜๋‚ด๋ฆฐ ๊ฒƒ์„ ํด๋ž˜์Šค๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

๊ฐ์ฒด = ๋ถ•์–ด๋นต

ํด๋ž˜์Šค = ๋ถ•์–ด๋นต ํ‹€

 

 

 


 

oopํ•˜๋ฉด ์ž๋™์œผ๋กœ 4๊ฐ€์ง€ ์†์„ฑ์ด ๋– ์˜ฌ๋ผ์•ผ ํ•œ๋‹ค.

 

OOP ์†์„ฑ

1. ์บก์Šํ™” Encapsulation

์บก์Šํ™”๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ทธ ๊ฐ์ฒด๊ฐ€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค ๋•Œ ํ›—๋‚  ์ดํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๊ฐ€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•  ๋ณ€์ˆ˜์™€ ๊ทธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ํŠน์ •ํ•œ ์•ก์…˜ ์ฆ‰ ๋ฉ”์„œ๋“œ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ด€๋ จ์„ฑ ์žˆ๊ฒŒ ํด๋ž˜์Šค์— ๊ตฌ์„ฑํ•ด์•ผํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ์€ํ–‰์ด๋ผ๋Š” ํด๋ž˜์Šค๋Š” ์ž”๊ณ ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ  ๊ทธ ์ž”๊ณ ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜, ์ž”๊ณ ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ฑ์ด ์žˆ๋‹ค๊ณ  ์น˜๋Š” ๊ฒƒ์ด๋‹ค. 

๊ทผ๋ฐ ์บก์Šํ™”๋ฅผ ํ•˜๋Š” ์ค‘์š”ํ•œ ๋ชฉ์ ์€ ๋ฐ”๋กœ ์ •๋ณด์˜ ์€๋‹‰ํ™”์ด๋‹ค.  ์ž”๊ณ ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋งŒ์•ฝ public ์œผ๋กœ ์„ ์–ธ๋˜์–ด์žˆ๋‹ค๊ณ  ์น˜์ž. 200๋งŒ์›์ธ ๋‚˜์˜ ์ž”๊ณ ๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€ ์ ‘๊ทผ์— ์˜ํ•ด 0์›์ด ๋ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž”๊ณ ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก private๋กœ ์„ ์–ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ณดํ˜ธ๋œ ๋ณ€์ˆ˜๋Š” getter๋‚˜ setter๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์บก์Šํ™”์˜ ์ค‘์š”ํ•œ ๋ชฉ์ ์ด๋‹ค.

 

 

 

2. ์ถ”์ƒํ™” Abstraction

์ถ”์ƒ์ ์œผ๋กœ ์ƒ๊ฐํ•ด ์ผ๋‹จ ํฐํ‹€์˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ์ตœ์†Œ ์ด๋Ÿฌํ•œ ๊ณตํ†ต์ ์ธ ์š”์†Œ๋‚˜ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋Š” ๋“ค์–ด๊ฐ”์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žจ์—์„œ ๋งŒ๋“  ๊ฒƒ์ด ์ถ”์ƒํด๋ž˜์Šค์ด๋‹ค.

 

์ด ๊ณผ์ •์—์„œ ๊ณตํ†ต์ ์ธ ์š”์†Œ๋‚˜ ํŠน์ง•์„ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์ด ์ถ”์ƒํ™” ์ธ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ๋ฒค์ธ ,์•„์šฐ๋””,์†Œ๋‚˜ํƒ€,ํ‹ฐ์ฝ”,๋ฐดํ‹€๋ฆฌ ๋“ฑ๋“ฑ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์—ฌ๋Ÿฌ์ข…๋ฅ˜์˜ ์ž๋™์ฐจ์ด ์žˆ๋‹ค. ์ด๊ฒƒ์„ ๋‹ค ํด๋ž˜์Šคํ™”ํ•˜๊ณ  ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฌด๋ชจํ•œ ์ง“์ด๋‹ค. (๊ฑฐ๋‘์ ˆ๋ฏธํ•˜๊ณ  ๋งํ•˜๋ฉด ํ™•์žฅ์„ฑ๋•Œ๋ฌธ์— ์ถ”์ƒํ™”ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.)

 

๋”ฐ๋ผ์„œ ๋ฐฉ๊ธˆ ๋‚˜์—ดํ•œ ์ž๋™์ฐจ๋“ค์˜ ๊ณตํ†ต์ ์ธ ์š”์†Œ๋‚˜ ํŠน์ง•์„ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์ธ ์ถ”์ƒํ™”๋ฅผ ๊ฑฐ์ณ ์š”์†Œ๋ฅผ ๋„์ง‘์–ด ๋‚ด๋ฉด, ๋ฐ”ํ€ด,๋ฐฐ๊ธฐํ†ต,ํ•ธ๋“ค,์ฐจ๋ฌธ,์œ ๋ฆฌ์ฐฝ,๋“ฑ ํ•„์ˆ˜์ ์ธ ๋ถ€ํ’ˆ์ด ์žˆ๊ณ  ๋ฐ”ํ€ด๋Š” ๊ตด๋Ÿฌ๊ฐ€์•ผํ•˜๋ฉฐ, ํ•ธ๋“ค์€ ์ขŒ์šฐ๋กœ ๋Œ์•„๊ฐ€์•ผํ•˜๊ณ  

 

์ฐจ๋ฌธ์€ ์—ด๋ ค์•ผํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ธ ํ–‰๋“ฑ ์ฆ‰ ์–ด๋–ค ์ฐจ๋“  ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ถœ๋œ๋‹ค. 

 

 

 

3. ๋‹คํ˜•์„ฑ Polymorphism

๋‹คํ˜•์„ฑ์€ ์ƒ์†์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ, ์ฝ”๋“œ๊ธธ์ด ๊ฐ์†Œ๊ฐ€ ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐœ๋…์ด๋‹ค.

 

์‰ฝ๊ฒŒ ๊ฐ™์€ ๋™์ž‘์ด์ง€๋งŒ ๋‹ค๋ฅธ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚˜์˜ฌ๋•Œ ์ด๋ฅผ ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

ํฌ๊ฒŒ ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋‹คํ˜•์„ฑ์˜ ๊ฐœ๋…์„ ๋…น์—ฌ๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€์ธ๋ฐ, ๋ฐ”๋กœ

์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) ์ด๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ์„œ๋ธŒํด๋ž˜์Šค ์ฆ‰ ์ž์‹ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจํด๋ž˜์Šค,์ฆ‰ ์ƒ์œ„ํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ์˜ ์ž…๋ง›๋Œ€๋กœ ๋‹ค์‹œ ์žฌ์ฐฝ์กฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์—์„œ ๊ฐ™์€์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ฐ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋„ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐœ๋…์ธ๋ฐ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ๋ฉ”์„œ๋“œ๋ผ๋ฆฌ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์ ์šฉ๋˜์–ด ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๊ฐ™์•„๋„ 
๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€์•Š๋Š”๋‹ค..

 

 

 

4. ์ƒ์†์„ฑ, ์žฌ์‚ฌ์šฉ Inheritance

์ƒ์†์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์†์ด๋ž€ ๊ธฐ์กด ์ƒ์œ„ํด๋ž˜์Šค์— ๊ทผ๊ฑฐํ•˜์—ฌ ์ƒˆ๋กญ๊ฒŒ ํด๋ž˜์Šค์™€ ํ–‰์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐœ๋…์ด๋‹ค.

 

๊ธฐ์กดํด๋ž˜์Šค์— ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์œผ๋ฉด์„œ๋„ ๋™์‹œ์— ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 

* ์ž๋ฐ”์—์„  ์ƒ์†์€ ๋‹จ์ผ์ƒ์†๋ฐ–์— ์ง€์›์ด ์•ˆ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์ค‘์ƒ์†์ด ํ•„์š”ํ•  ์ˆœ ์žˆ๋‹ค๊ณ  ์ธ์ •ํ•˜์—ฌ ๋Œ€๋น„์ฑ…์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์ค‘์ƒ์†(๊ตฌํ˜„) ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ด์„œ ์ž„์‹œ์ ์ธ ๋‹ค์ค‘ ์ƒ์†์— ๋Œ€ํ•œ ํ™œ๋กœ๋Š” ๋šซ์–ด์คฌ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์กด์žฌ์ด์œ ๊ฐ€ ๋‹ค์ค‘์ƒ์†์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

JVM
Java Virtual Machine
์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ 


* ๊ฐ€์ƒ ๋จธ์‹  : ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ๋ฆฌ์  ๋จธ์‹ ๊ณผ ์œ ์‚ฌํ•œ ๋จธ์‹ ์„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ

 

  • JVM์€ JAVA์™€ OS ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ JAVA๊ฐ€ OS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅ์ผ€ ํ•ด์ค€๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ, Garbage collection์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • JVM์€ ์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฏ€๋กœ ์Šคํƒ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

์™œ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์„ ์•Œ์•„์•ผํ• ๊นŒ?

ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ์„ ๋‚ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.
๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ขŒ์šฐ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์†๋„ ์ €ํ•˜ ํ˜„์ƒ์ด๋‚˜ ํŠ•๊น€ ํ˜„์ƒ๋“ฑ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 


 

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •

1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. 
                         JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. ( .java -> .class )
3. Class Loader๋ฅผ ํ†ตํ•ด class ํŒŒ์ผ๋“ค์„ JVM์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.
4. ๋กœ๋”ฉ๋œ class ํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.
5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” runtime data areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
             ์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ • ์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ GC ๊ฐ™์€ ๊ด€๋ฆฌ์ž‘์—… ์ˆ˜ํ–‰

 

 

JVM

 

 

JVM ๊ตฌ์„ฑ

Class Loader

JVM๋‚ด๋กœ ํด๋ž˜์Šค( .class ํŒŒ์ผ )๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. runtime ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ๋‹ค. jar ํŒŒ์ผ ๋‚ด ์ €์žฅ๋œ ํด๋ž˜์Šค๋“ค์„ JVM ์œ„์— ํƒ‘์žฌํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค. (์ปดํŒŒ์ผ๋Ÿฌ ์—ญํ• ) ์ž๋ฐ”๋Š” ๋™์  ์ฝ”๋“œ, ์ปดํŒŒ์ผ ํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„์— ์ฐธ์กฐํ•œ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์ฐธ์กฐํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋งํฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํด๋ž˜์Šค ๋กœ๋”๋‹ค.

 

 

Execution Engine 

ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ์ด๋‹ค. ํด๋ž˜์Šค๋กœ๋”๊ฐ€ JVM ๋‚ด์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฐฐ์น˜์‹œํ‚ค๊ณ , ์ด๊ฒƒ์€ ์‹คํ–‰ ์—”์ง„์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค. ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ณด๋‹ค๋Š” ๋น„๊ต์  ์ธ๊ฐ„์ด ๋ณด๊ธฐ ํŽธํ•œ ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํ–‰ ์—”์ง„์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹ค์ œ JVM ๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. 

์ด๋•Œ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

Interpreter 
์‹คํ–‰ ์—”์ง„์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ๋‹จ์ ์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ  ์žˆ๋‹ค. 
ํ•œ ์ค„ ์”ฉ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

JIT ( Just - In - Time )
์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋‹ค. 
์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
๋ฌผ๋ก  JIT์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฏ€๋กœ, ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ๋ฉด ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.
๋”ฐ๋ผ์„œ JIT์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JVM๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  ์ผ์ • ์ •๋„๋ฅผ ๋„˜์„ ๋•Œ์—๋งŒ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

Garbage collector

GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ(thread)์ด ์žˆ๋‹ค.

 

 

 

 


Runtime Data Area

:ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS์—์„œ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

Runtime Data Area

 

1. PC ๋ ˆ์ง€์Šคํ„ฐ

Thread๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.

์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๊ณ  thread๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ค ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•ด์•ผํ• ์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ JVM ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

 

2. JVM ์Šคํƒ ์˜์—ญ

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •์—์„œ ์ž„์˜๋กœ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ๋ฐ”๋กœ ์†Œ๋ฉธ๋˜๋Š” ํŠน์„ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์˜์—ญ์ด๋‹ค. ๊ฐ์ข… ํ˜•ํƒœ์˜ ๋ณ€์ˆ˜๋‚˜ ์ž„์„ธ ๋ฐ์ดํ„ฐ, ์Šค๋ ˆ๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„(๊ทธ ๋ฉ”์†Œ๋“œ๋งŒ์„ ์œ„ํ•œ ๊ณต๊ฐ„)์ด ์ƒ์„ฑ๋œ๋‹ค.

๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ํ”„๋ ˆ์ž„ ๋ณ„๋กœ ์‚ญ์ œ๋ฅผ ํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค(local variable)์„ ์ €์žฅํ•œ๋‹ค.

๋˜ ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’ ๋ฐ ์—ฐ์‚ฐ ์‹œ ์ผ์–ด๋‚˜๋Š” ๊ฐ’๋“ค์„ ์ž„์‹œ๋กœ ์ €์žฅํ•œ๋‹ค.

 

 

3. Native method stack

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ, ์‹ค์ œ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค. (JAVA๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„)

JAVA Native Interface๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 

์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ปค๋„์ด ์Šคํƒ์„ ์žก์•„ ๋…์ž์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค.

์ด ๋ถ€๋ถ„์„ ํ†ตํ•ด C code๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ปค๋„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

4. Metod Area = class area = static area

ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์˜ฌ๋ฆด ๋•Œ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๋Œ€์ƒ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ด๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ main ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์—์„œ๋ถ€ํ„ฐ ๊ณ„์†๋œ ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ๋กœ ํ๋ฆ„์„ ์ด์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๋Œ€๋ถ€๋ถ„ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋„ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๋ช…๋ นํ•˜๊ณ  ํ˜ธ์ถœํ•œ๋‹ค. 

์‚ฌ์‹ค์ƒ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜  ๋Œ€๋ถ€๋ถ„์ด ๋ฉ”์†Œ๋“œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค๊ณ  ๋ด๋„ ์ƒ๊ด€ ์—†๋‹ค. 

์ด ๊ณต๊ฐ„์—๋Š” Runtime Constant Pool์ด๋ผ๋Š” ๋ณ„๋„์˜ ๊ด€๋ฆฌ์˜์—ญ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋Š” ์ƒ์ˆ˜ ์ž๋ฃŒํ˜•์„ ์ €์žฅํ•˜์—ฌ ์ฐธ์กฐํ•˜๊ณ  ์ค‘๋ณต์„ ๋ง‰๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ฌ๋ผ๊ฐ€๋Š” ์ •๋ณด์˜ ์ข…๋ฅ˜

- field information : ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ ‘๊ทผ ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด
- method information : ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„, ๋ฆฌํ„ด ํƒ€์ž…, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ ‘๊ทผ ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด
- type information : class์ธ์ง€ interface์ธ์ง€์˜ ์—ฌ๋ถ€ ์ €์žฅ, type์ด ์†์„ฑ, ์ „์ฒด ์ด๋ฆ„, super class์˜ ์ „์ฒด ์ด๋ฆ„

* method area = ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„   |   heap ์˜์—ญ = ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„

  heap๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ GC์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค.

 

 

5. Heap

๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค. new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ €์žฅํ•œ๋‹ค.

๋ฌผ๋ก  class area ์˜์—ญ์— ์˜ฌ๋ผ์˜จ ํด๋ž˜์Šค๋“ค๋งŒ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํž™์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • New/Young Generation

Eden : ๊ฐ์ฒด๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„

Survivor 0/1 : Eden์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„

 

 

  • Old ์˜์—ญ

new area์—์„œ ์ผ์ • ์‹œ๊ฐ„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”, ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ธ Eden ์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋“์ฐจ๊ฒŒ๋˜๋ฉด ์ฒซ๋ฒˆ์งธ GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. eden ์˜์—ญ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ survivor 1 ์˜์—ญ์— ๋ณต์‚ฌํ•˜๊ณ  ์ด ์˜์—ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

* ์ธ์Šคํ„ด์Šค๋Š” ์†Œ๋ฉธ ๋ฐฉ๋ฒ•๊ณผ ์†Œ๋ฉธ ์‹œ์ ์ด ์ง€์—ญ ๋ณ€์ˆ˜์™€๋Š” ๋‹ค๋ฅด๊ธฐ์— ํž™์ด๋ผ๋Š” ๋ณ„๋„์˜ ์˜์—ญ์— ํ• ๋‹น ๋œ๋‹ค. JVM์€ ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค. ( ๋”์ด์ƒ ์ธ์Šคํ„ด์Šค์˜ ์กด์žฌ ์ด์œ ๊ฐ€ ์—†์„ ๋•Œ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค )

 

 

  • Permanent Generation

์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์˜ ์ •๋ณด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค.

class loader์— ์˜ํ•ด ๋กœ๋“œ๋˜๋Š” class, method ๋“ฑ์— ๋Œ€ํ•œ meta ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๊ณ  JVM์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

reflection์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ reflection ๊ธฐ๋Šฅ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” spring framework๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์ด ์˜์—ญ์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

HashMap๊ณผ HashTable

๋™๊ธฐํ™”๊ฐ€ ํ•„์š”์—†๋‹ค๋ฉด ํ•ด์‹œ๋งต์„,
๋™๊ธฐํ™” ๋ณด์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ํ•ด์‹œํ…Œ์ด๋ธ”์„!

 

 

์ฐจ์ด์ 

๋™๊ธฐํ™” Synchronization

HashMap์˜ ๊ฒฝ์šฐ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

๋ฐ˜๋ฉด ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ HashTable์€ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

* vector์˜ ์ƒ์œ„ ํ˜ธํ™˜ ๊ฐœ๋…์ธ ArrayList์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋“ฏ, ์ƒˆ๋กœ์šด ๋ฒ„์ „์ธ HashMap์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด ConcurrentHashMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ตฌํ˜•์ธ HashTable์€ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ผ๋Š” ๋น„์šฉ๋•Œ๋ฌธ์— HashMap์— ๋น„ํ•ด ๋Š๋ฆฌ๋‹ค. 

 

 

Thread-safe ์—ฌ๋ถ€

Hashtable์€ Thread-safeํ•˜๊ณ , HashMap์€ Thread-safeํ•˜์ง€ ์•Š๋‹ค.

๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ผ๋ฉด Hashtable์€ HashMap ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

 

 

Null ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋ถ€

Hashtable์€ key์— null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, HashMap์€ key์— null์„ ํ—ˆ์šฉํ•œ๋‹ค.

 

 

Enumeration ์—ฌ๋ถ€ 

HashMap์€ ์ €์žฅ๋œ ์š”์†Œ๋“ค์˜ ์ˆœํšŒ๋ฅผ ์œ„ํ•ด Fail-Fast Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(ConcurrentHashMap์˜ ๊ฒฝ์šฐ์—๋Š” Fail-Safe Iterator)

Hashtable์€ ๊ฐ™์€ ๊ฒฝ์šฐ Enumeration์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

* Fail-Fast Iterator : ๋ง ๊ทธ๋Œ€๋กœ ๋น ๋ฅธ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์— Enumeration๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ์ค‘๊ฐ„์— remove๋ฅผ ํ•ด๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•  ํ™•๋ฅ ๋„ ์กด์žฌํ•œ๋‹ค.

 

 

๋ณด์กฐ ํ•ด์‹œ ์‚ฌ์šฉ

HashMap์€ ๋ณด์กฐํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์กฐ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Hashtable์— ๋น„ํ•˜์—ฌ ํ•ด์‹œ ์ถฉ๋Œ(hash collision)์ด ๋œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์ƒ๋Œ€์ ์œผ๋กœ ์„ฑ๋Šฅ์ƒ ์ด์ ์ด ์žˆ๋‹ค.

 


<์ฐธ๊ณ >

https://odol87.tistory.com/3 https://devlog-wjdrbs96.tistory.com/253 https://12216715011126.tistory.com/53

์šฉ์–ด ์ •๋ฆฌ

Hash ์ž๋ฃŒ๊ตฌ์กฐ๋ž€

key์™€ value๋ฅผ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰๊ณผ ์ €์žฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

linked list์™€ ๋‹ฌ๋ฆฌ ํ•ด๋‹น ์ž๋ฃŒ๊ฐ€ ์œ„์น˜ํ•œ ๋ฒ„ํ‚ท์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ์•Œ์•„๋‚ด์–ด ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์— ์ˆ˜๋ ดํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

Hash ํ•จ์ˆ˜, Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜, Hash ์ฝ”๋“œ

์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ • ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜

๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ์— ์˜ํ•ด ํ•ด์‹œํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์ค‘๋ณต ๋˜์–ด ํ•ด์‹œ ์ถฉ๋Œ์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

* ๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ : n+1๊ฐœ์˜ ๋ฌผ๊ฑด์„ n๊ฐœ์˜ ์ƒ์ž์— ๋„ฃ์„ ๋•Œ, ์ ์–ด๋„ ์–ด๋Š ํ•œ ์ƒ์ž์—๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฌผ๊ฑด์ด ๋“ค์–ด์žˆ๋‹ค๋Š” ์›๋ฆฌ

 

๋ฐ์ดํ„ฐ์˜ value๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ธ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ›๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ๋ฌธ์ž ํ•œ๊ธ€์ž ํ•œ๊ธ€์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋งŒ์•ฝ, 
hello ๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ •์ˆ˜ํ˜• key ๊ฐ’์œผ๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด,
h + e + l + l + o -> 104 +101 + 108 + 108 + 111 = 532๋ผ๋Š”
ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋งˆ๋‹ค ์ ์ ˆํ•œ ํ•ด์‹œ ํ•จ์ˆ˜(ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์—ญ๋Ÿ‰์— ๋‹ฌ๋ ค์žˆ๋‹ค.

 

 

 

Hash ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Hash table์— ์ €์žฅํ•˜๊ธฐ

ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์•„์ฃผ ๋งŽ๋‹ค. ์ €์žฅํ•  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ  ์ˆ˜ ๋งŽ์€ ํ•ด์‹œ์ฝ”๋“œ๋“ค์„ ๋Œ€์ฒ˜ ํ•  ์ˆ˜ ์—†๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด 0๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ-1 ๋งŒํผ์˜ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ํ•ด์‰ฌ์ฝ”๋“œ๊ฐ€ 532์ด๊ณ  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 10์ธ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€๊ฐ€ 2๊ฐ€ ๋‚˜์˜ค๊ณ , ์ด ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

* ๊ฐ ๋ฒ„ํ‚ท์€ ๋ช‡ ๊ฐœ์˜ ์Šฌ๋กฏ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

 

 

OverFlow๋ž€ 

์—ฌ๋Ÿฌ๊ฐœ์˜ ํ‚ค๊ฐ’์ด ๊ณตํ†ต๋œ ๋ฒ„ํ‚ท์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ, ๋ฒ„ํ‚ท๋“ค์˜ ๊ณต๊ฐ„์€ ์œ ํ•œํ•ด์„œ ๊ฒฐ๊ตญ ๋ฒ„ํ‚ท์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋œ๋‹ค.

๊ฝ‰ ์ฐจ์žˆ๋Š” ์ˆœ๊ฐ„ ๋˜ํ•˜๋‚˜์˜ ํ‚ค๊ฐ’์ด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋งตํ•‘๋œ๋‹ค๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

์ถฉ๋Œ Collision

๋‹ค๋ฅธ ํ•ด์‹œ์ฝ”๋“œ์ž„์—๋„ ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์ถฉ๋Œ์˜ ํ•ด๊ฒฐ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 

๋ถ„๋ฆฌ ์ฒด์ธ๋ฒ•, ์„ ํ˜• ํƒ์‚ฌ๋ฒ•, 2์ฐจ ํƒ์‚ฌ๋ฒ•, ์ด์ค‘ ํ•ด์‹ฑ ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

* ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ž๋ฐ”์—์„œ hashCode( )๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ๋•Œ equals( )๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผํ•œ๋‹ค. ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์šฐ์—ฐํžˆ ํ•ด์‹œ์ฝ”๋“œ๊ฐ€ ๋˜‘๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋”๋ผ๋„ equals๋กœ ๊ฐ’์˜ ๋™๋“ฑ์„ฑ์„ ํ•œ๋ฒˆ ๋” ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ

1. ๋ถ„๋ฆฌ ์ฒด์ธ๋ฒ• seperate chaning (open hashing)

๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ, ๊ทธ ์ธ๋ฑ์Šค์˜ Linked List๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ ๋ฐ์ดํ„ฐ๋“ค์„ ์ด ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.

์ด ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ €์žฅ, ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ์ธ๋ฑ์Šค์˜ ์ ‘๊ทผํ•˜๊ณ  ์ธ๋ฑ์Šค์— ์กด์žฌํ•˜๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•˜๋‚˜์”ฉ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ์ธ๋ฑ์Šค์˜ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜ (ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์ด ์ฃผ์–ด์ง„ ๋ฌธ์ œ์— ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์„ค๊ณ„๋ฅผ ๋‹ค์‹œ ๊ณ ๋ คํ•ด๋ด์•ผ ํ•œ๋‹ค. 

* ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฃผ์–ด์ง„ ํ•ด์‹œํ…Œ์ด๋ธ” ๊ณต๊ฐ„์™ธ์˜ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— open hashing์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

 

 

 

 

2. Open Addressing (Closed Hashing)

์ฃผ์–ด์ง„ ํ•ด์‹œํ…Œ์ด๋ธ”์—์„œ ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. open addressing์˜ ๋ฒ„ํ‚ท ๊ฒฐ์ • ๋ฐฉ๋ฒ•์—๋Š” ๋ช‡๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

 

2.1 ์„ ํ˜• ์กฐ์‚ฌ

์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๋‹ค์Œ ์ž๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

์ œ 1 ๊ตฐ์ง‘ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค

* ์ œ 1 ๊ตฐ์ง‘ ํ˜„์ƒ : ํŠน์ • ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆด ๋•Œ, linked list์˜ ์ˆœ์ฐจ ํƒ์ƒ‰์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ๊ณต๊ฐ„์ด ์ง€์ •๋˜์–ด ์„ฑ๋Šฅ์ด ์น˜๋ช…์ ์œผ๋กœ ์ €ํ•˜๋œ๋‹ค. ( ์ด์ฐจ์› ์กฐ์‚ฌ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค)

 

 

 

 

2.2 ์ด์ฐจ์› ์กฐ์‚ฌ

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ž๋ฆฌ๋ฅผ ์ด์ฐจํ•จ์ˆ˜๋กœ ๊ฒฐ์ •ํ•œ๋‹ค.

 

2.3 ๋”๋ธ” ํ•ด์‹ฑ

 

2.4 ๋ฌด์ž‘์œ„ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•


<์ฐธ๊ณ >

https://siyoon210.tistory.com/85 https://galid1.tistory.com/171

+ Recent posts