๐ก ์ด ๊ฒ์๊ธ์ ๊น์ํ ๊ฐ์ฌ๋์ ์๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ๋ฉฐ ํ์ตํ ๋ด์ฉ์ ์ค์ํ ํค์๋ ์ค์ฌ์ผ๋ก ์ ๋ฆฌํ ๊ฐ์ธ ํ์ต ๊ธฐ๋ก์ ๋๋ค. ์ค์ง ๊ธฐ์ต ๋ณต๊ธฐ๋ฅผ ์ํ ๋ชฉ์ ์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ชจ๋ ๋ด์ฉ์ ํฌํจํ์ง ์์ผ๋ฏ๋ก ์ฒด๊ณ์ ์ธ ํ์ต ์๋ฃ๋ก๋ ์ ํฉํ์ง ์์ต๋๋ค.
" Java๋ C++์ฒ๋ผ virtual์ ๋ช ์ํ์ง ์์๋, (๋๋ถ๋ถ์) ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ์ด ๊ธฐ๋ณธ์ ์ผ๋ก โ๋ฐํ์์ ์ค์ ๊ฐ์ฒด ํ์ โ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋๋ค(๋์ ๋์คํจ์น). "
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 ๋ด๋ถ ์๋ ๋ฐฉ์์ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค.
๐ก ๋ณธ ํ๊ธฐ ๋ด๋ถ์ ๊ฐ์ข์์ ์ ๊ณต๋ ์๋ฃ ์ด๋ฏธ์ง์ ์ธ๋ถ์๋ฃ ์บก์ณ ์ด๋ฏธ์ง๊ฐ ์์ด ์ผ์์ ์ผ๋ก ๋ธ๋ฌ์ฒ๋ฆฌ ํฉ๋๋ค.


๊ฐ์ ํจ์(Virtual-Function)๋ ๊ฐ์ฒด์ "์ค์ ํ์ " ์ ๊ธฐ์ค์ผ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค.
์ฆ, ์ ์บ์คํ ๋์ด๋, ์ค์ ๊ฐ์ฒด๊ฐ ์์ ํ์ ์ด๋ฉด ์์ ํด๋์ค์ ๋ฉ์๋๊ฐ ์คํ๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
๊ฐ ํด๋์ค๊ฐ ๋ก๋๋ ๋, ๋ฉ์๋ ์์ญ(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 ๊ฐ๋ ์ ๊ตฌ๋ถํ์ฌ ์ฌ๊ณ ํ๋ ๊ฒ์ด ์ดํด์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.