[Java] Dynamic Method Dispatch & V-Table (JVM)

HeyyJunnยท2025๋…„ 3์›” 8์ผ

[Java] Archive

๋ชฉ๋ก ๋ณด๊ธฐ
1/4

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

" Java๋Š” C++์ฒ˜๋Ÿผ virtual์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„, (๋Œ€๋ถ€๋ถ„์˜) ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ โ€˜๋Ÿฐํƒ€์ž„์— ์‹ค์ œ ๊ฐ์ฒด ํƒ€์ž…โ€™์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค(๋™์  ๋””์ŠคํŒจ์น˜). "

C++์„ ๋ฐฐ์šฐ๊ณ  Java๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ๋А๋‚€ ํ˜ผ๋ž€

C++ ์„ ๋ฐฐ์šฐ๊ณ  Java ๋ฅผ ํ•™์Šตํ•˜๋‹ˆ JVM ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ž€ ๊ฐœ๋…๊ณผ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ” V-Table ์ด๋ž€ ๊ฐœ๋…์ด ๋‚ฏ์„ค์—ˆ๋‹ค.

C++ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Static-Binding(์ •์  ๋ฐ”์ธ๋”ฉ) ์— virtual ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜์–ด Dynamic-Binding ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค๋ฉด, Java ๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ž๋™์œผ๋กœ V-Table ์ด ์ƒ์„ฑ๋˜์–ด (Compile-Time), Run-Time์— Dynamic-Dispatch ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์—์„œ ํ˜ผ๋ž€์ด ์žˆ์—ˆ๋‹ค.

ํŠนํžˆ ์˜ค๋žœ๋งŒ์— ๋‹คํ˜•์„ฑ ( override, up/down casting ) ๊ฐœ๋…์„ ์ ‘ํ•˜๋Š”๋ฐ, ๊ฐ•์ขŒ์—” ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…์ด ์—†์–ด JVM ๊ณผ V-table ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์„ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

๐Ÿ’ก ๋ณธ ํ•„๊ธฐ ๋‚ด๋ถ€์— ๊ฐ•์ขŒ์—์„œ ์ œ๊ณต๋œ ์ž๋ฃŒ ์ด๋ฏธ์ง€์™€ ์™ธ๋ถ€์ž๋ฃŒ ์บก์ณ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์–ด ์ผ์‹œ์ ์œผ๋กœ ๋ธ”๋Ÿฌ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.

1. ๋ชจ๋“  instance method๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ V-table ์„ ํ†ตํ•ด ๋™์ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

๊ฐ€์ƒ ํ•จ์ˆ˜(Virtual-Function)๋Š” ๊ฐ์ฒด์˜ "์‹ค์ œ ํƒ€์ž…" ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, ์—…์บ์ŠคํŒ… ๋˜์–ด๋„, ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ํƒ€์ž…์ด๋ฉด ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

2. Compile-Time ์— V-Table ์ด ์ƒ์„ฑ๋˜๊ณ , Run-Time ์— Method ํ˜ธ์ถœ์ด V-Table ์„ ํ†ตํ•ด ๊ฒฐ์ •๋œ๋‹ค (Dynamic Binding)

๊ฐ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋  ๋•Œ, ๋ฉ”์„œ๋“œ ์˜์—ญ(Method Area)์— ํด๋ž˜์Šค ์ •๋ณด์™€ ํ•จ๊ป˜ V-Table์ด ์ƒ์„ฑ๋œ๋‹ค. (Compile-Time)

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ V-Table์„ ์ƒ์†๋ฐ›๊ณ , ์ž์‹์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด V-Table์„ ๋ฎ์–ด์จ ๊ฐฑ์‹  ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ดํ›„ Run-Time ์— Heap ์˜์—ญ์˜ ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” V-Table ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

โˆด ๊ทธ๋Ÿฌ๋ฏ€๋กœ,

ํ•ด๋‹น 2๊ฐ€์ง€๋ฅผ ์•Œ์ง€ ๋ชปํ•˜์—ฌ ๋‹คํ˜•์„ฑ1 section ์˜ override ๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ๊ณ„์†ํ•ด์„œ ์˜๊ตฌ์‹ฌ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

JVM ์ด ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•˜์—ฌ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ Method Area ์— ๋กœ๋“œํ•˜๊ณ  V-Table์„ ์ƒ์„ฑํ•˜์—ฌ ์ง€๋‹Œ๋‹ค๋Š” ์ ์„ ๋ชจ๋ฅด๋‹ˆ, ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ JVM์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋™์  ๋ฐ”์ธ๋”ฉํ•˜๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.๐Ÿ˜‡ ( C++ ์€ virtual keyword ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ๊ฐ€์ƒํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ )

์•ž์œผ๋กœ ํ•™์Šต์„ ํ•ด๋‚˜๊ฐˆ ๋•Œ Compile-Time, Run-Time ๊ฐœ๋…์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์ดํ•ด์— ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

profile
Data Science Major, School of AI ยท Convergence Software - Myongji University (SEOUL)

0๊ฐœ์˜ ๋Œ“๊ธ€