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

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java][JVM] JVM ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ switch ๋ฌธ์— ์ ์šฉํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•

์ถœ์ฒ˜

ChatGPT


Java์—์„œ switch ๋ฌธ์ด if ๋ฌธ๋ณด๋‹ค ์„ฑ๋Šฅ์ ์œผ๋กœ ๋” ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๋•๋ถ„์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ switch ๋ฌธ์ด ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋  ๋•Œ, JVM์ด ์ด ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

1. JIT ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 

Java ํ”„๋กœ๊ทธ๋žจ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด JVM(Java Virtual Machine)์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ด๋ฉฐ, JVM์€ ์ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋ณ€ํ™˜ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ JIT ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค.

 

JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. ์ด๋•Œ, switch ๋ฌธ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋‚˜๋ฉด, ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. Jump Table ์ตœ์ ํ™”

  • Jumpt Table์€ switch ๋ฌธ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. switch ๋ฌธ์ด ์—ฌ๋Ÿฌ ์ผ€์ด์Šค๋ฅผ ๊ฐ€์งˆ ๋Œ€, ๊ฐ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ๋ถ„๊ธฐ(๋ธŒ๋žœ์นญ)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Jump Table์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์ž‘ ๋ฐฉ์‹ : Jump Table์€ ์ผ์ข…์˜ ๋ฐฐ์—ด์ด๋‹ค. ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋Š” switch ๋ฌธ์˜ ์ผ€์ด์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ ์œ„์น˜(์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. switch ๋ฌธ์—์„œ ํŠน์ • ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๊ธฐํ•ด์•ผ ํ•  ๋•Œ, JVM์€ ์ด ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ Jumpt Table์—์„œ ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜๋กœ ๋ฐ”๋กœ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํšจ์œจ์„ฑ : ์ด ๋ฐฉ์‹์€ ์—ฐ์†์ ์ธ ๊ฐ’์˜ ์บ์ด์Šค๊ฐ€ ์žˆ์„ ๋•Œ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, case 1, case 2, case 3 ์ฒ˜๋Ÿผ ์—ฐ์†๋œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” switch ๋ฌธ์ด ์žˆ๋‹ค๋ฉด, ์ด ๊ฐ’์€ Jumpt Table์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ณ , ์กฐ๊ฑด๋ฌธ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ํ•„์š” ์—†์ด ์ฆ‰์‹œ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ๋ฌธ์—, if-else ์ฒด์ธ์ฒ˜๋Ÿผ ์กฐ๊ฑด์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

 

3. ๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜  ํŠธ๋ฆฌ ์ตœ์ ํ™”

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜ ํŠธ๋ฆฌ ๋ฐฉ์‹์€ switch ๋ฌธ์˜ case ๊ฐ’๋“ค์ด ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋น„๊ตํ•  ๊ฐ’๋“คใ…‡๋ฅด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ฐฐ์—ดํ•˜์—ฌ ๋น„๊ต ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.
  • ๋™์ž‘ ๋ฐฉ์‹
    • case ๊ฐ’๋“ค์ด ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ, ์ค‘๊ฐ„๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
    • switch ๋ฌธ์˜ ์ž…๋ ฅ๊ฐ’์ด ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ํ•ด๋‹น ๋ฒ”์œ„๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๊ฐ€๋ฉฐ ๋น„๊ตํ•œ๋‹ค.
    • ์ด ๋ฐฉ์‹์€ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋ฉฐ, O(log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

 

4. Look-Up Table ํƒ์ƒ‰ ํ…Œ์ด๋ธ”

  • Look-Up Table์€ ๊ฐ case ๊ฐ’์— ๋Œ€ํ•œ ์ง์ ‘ ์ฐธ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์€ case ๊ฐ’๋“ค์ด ์—ฐ์†์ ์ด์ง€ ์•Š์ง€๋งŒ, ํŠน์ •ํ•œ ํŒจํ„ด์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์ž‘ ๋ฐฉ์‹
    • case ๊ฐ’๋“ค์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ…Œ์ด๋ธ”(ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ ๋น„์Šทํ•œ ๊ตฌ์กฐ)๋ฅผ ๋งŒ๋“ค๊ณ , switch ๋ฌธ์—์„œ ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น case๋กœ ์ ํ”„ํ•œ๋‹ซ.
    • ๊ฐ case ๊ฐ’์ด ํ…Œ์ด๋ธ”์˜ ํ‚ค(key)๊ฐ€ ๋˜๋ฉฐ, ํ•ด๋‹นํ•˜๋Š” ๋ถ„๊ธฐ ์ฝ”๋“œ๊ฐ€ ํ…Œ์ด๋ธ”์˜ ๊ฐ’(value)์ด ๋œ๋‹ค.
    • ์ด ๋ฐฉ์‹์€ ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, ํŠน์ • case ๊ฐ’์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ผ์ผ์ด ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋‹ค.

 

5. if-else ์ฒด์ธ์œผ๋กœ ๋Œ€์ฒด

  • ๋•Œ๋•Œ๋กœ switch ๋ฌธ์ด ์ตœ์ ํ™”๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํŠนํžˆ case ๊ฐ’๋“ค์ด ๋งค์šฐ ๋“œ๋ฌผ๊ฑฐ๋‚˜ ๋น„์ •์ƒ์ ์œผ๋กœ ๋ถˆ๊ทœ์น™ํ•œ ๊ฒฝ์šฐ, JVM์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋ฅผ if-else ์ฒด์ธ์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํŠน์ • case ๊ฐ’์˜ ๋นˆ๋„๋ฅผ ๋”ฐ๋ผ ์กฐ๊ฑด๋ฌธ์„ ์žฌ๋ฐฐ์น˜ํ•˜์—ฌ ๊ฐ€์žฅ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋Š” ์กฐ๊ฑด์„ ๋จผ์ € ๊ฒ€์‚ฌํ•˜๋„๋ก ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

6. ํ”„๋กœํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”

  • ํ”„๋กœํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”(profile-guided optimization)๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋นˆ๋ฒˆํžˆ ์‹คํ–‰๋˜๋Š” case ๋ฌธ์„ ํƒ์ง€ํ•˜์—ฌ, ๋นˆ๋„๊ฐ€ ๋†’์€ case ๋ฌธ์„ ๋จผ์ € ๊ฒ€์‚ฌํ•˜๋„๋ก switch ๋ฌธ์„ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ์ƒํ™ฉ์—์„œ ์ตœ์ ํ™”๊ฐ€ ์ ์šฉ๋˜์–ด ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.