๊ด€๋ฆฌ ๋ฉ”๋‰ด

Binary Journey

[Java] ์ฝ”๋“œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž๋ฐ” ์ฒซ ๊ฑธ์Œ (4-6) Q & A ๋ณธ๋ฌธ

Java | Spring

[Java] ์ฝ”๋“œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž๋ฐ” ์ฒซ ๊ฑธ์Œ (4-6) Q & A

binaryJournalist 2025. 1. 25. 17:08
๋ฐ˜์‘ํ˜•

๐Ÿ’ก inflearn - ๊น€์˜ํ•œ์˜ ์‹ค์ „ ์ž๋ฐ” ๋กœ๋“œ๋งต์„ ๋”ฐ๋ผ ํ•™์Šตํ•˜๊ณ  ์งˆ๋ฌธ์„ ๋ฝ‘์•„ ๋‹ตํ•˜๋ฉฐ ๋ณต์Šตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•™์Šต๋‚ด์šฉ์€ ์„น์…˜ 4๋ถ€ํ„ฐ ์„น์…˜6๊นŒ์ง€์ด๋ฉฐ ์ •๋ฆฌ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์—ฐ์‚ฐ์ž

 

"๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ == ๋Œ€์‹  equals()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • == ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ๋น„๊ตํ•˜๊ณ , equals()๋Š” ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  • String ๊ฐ์ฒด๋Š” ์ƒ์„ฑ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค:
    • ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ ์‹œ("hello"): String Pool์— ์ €์žฅ๋˜์–ด ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
    • new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ ์‹œ: ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋‹ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
      String str1 = "hello";
      String str2 = "hello";
      String str3 = new String("hello");
      str1 == str2; // true (๊ฐ™์€ String Pool์˜ ์ฐธ์กฐ)
      str1 == str3; // false (๋‹ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐ)
      str1.equals(str3); // true (๋‚ด์šฉ ๋น„๊ต)

 

"์‚ฐ์ˆ  ์—ฐ์‚ฐ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”? (์˜ˆ: 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ)"

  • 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ: ArithmeticException ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„  ์‚ฌ์ „์— ๋ถ„๋ชจ ์ฒดํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ/์–ธ๋”ํ”Œ๋กœ์šฐ: ํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ๊ณ„์‚ฐ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋” ํฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์˜ ์ •๋ฐ€๋„ ๋ฌธ์ œ: 0.1 + 0.2 != 0.3
    • BigDecimal ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

"BigDecimal ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ”๊ฐ€์š”?"

  • ์ž๋ฐ”์—์„œ ์‹ค์ˆ˜ํ˜•(float, double)์€ ๋ถ€๋™์†Œ์ˆ˜์  ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•œ ์‹ค์ˆ˜ ๊ณ„์‚ฐ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • BigDecimal์€ ์ด๋Ÿฐ ๋ถ€๋™์†Œ์ˆ˜์ ์˜ ์˜ค์ฐจ ์—†์ด ์ •ํ™•ํ•œ ์‹ค์ˆ˜ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋งŒ BigDecimal์€ ์ผ๋ฐ˜ ์‹ค์ˆ˜ํ˜•๋ณด๋‹ค ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์–ด, ์ •ํ™•ํ•œ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

"์ฆ๊ฐ ์—ฐ์‚ฐ์ž(++, --)์˜ ์ „์œ„ ์—ฐ์‚ฐ๊ณผ ํ›„์œ„ ์—ฐ์‚ฐ์˜ ์ฐจ์ด์ ์„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • ์ฆ๊ฐ ์—ฐ์‚ฐ์ž๋ฅผ ๋ณ€์ˆ˜ ์•ž์— ๋ถ™์ด๋ฉด ์ „์œ„ ์—ฐ์‚ฐ, ๋’ค์— ๋ถ™์ด๋ฉด ํ›„์œ„ ์—ฐ์‚ฐ์œผ๋กœ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
      int a = 1;
      int b = ++a;
      int c = a++;
    ์œ„ ์ฝ”๋“œ๋ฅผ ๋†“๊ณ  ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ณ€์ˆ˜ a๊ฐ€ ์žˆ๊ณ  a์˜ ๊ฐ’์€ 1์œผ๋กœ ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ์ „์œ„ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ++a๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฒฝ์šฐ ๊ฐ™์€ ๋ผ์ธ์˜ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•  ๋•Œ ์ „์œ„ ์—ฐ์‚ฐ์„ ๋จผ์ € ์‹คํ–‰ํ•œ ๋’ค์— ๊ฐ™์€ ๋ผ์ธ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด int b = ++a ์˜ ์ฝ”๋“œ๋Š” b์— ๊ฐ’์„ ๋‹ด๊ธฐ ์ „์— a = a + 1์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ b์—๋Š” 2๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ int c = a++์˜ ๊ฒฝ์šฐ ๊ฐ™์€ ๋ผ์ธ์˜ ์ฝ”๋“œ์—์„œ ํ›„์œ„ ์—ฐ์‚ฐ์„ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. c์—๋Š” ์—ฐ์‚ฐ ์ „์˜ a๊ฐ’์ธ 2๊ฐ€ ์ €์žฅ๋˜๊ณ  ๊ทธ ๋’ค์— a = a + 1์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

 

์กฐ๊ฑด๋ฌธ

 

"if-else์™€ switch ์ค‘ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ์š”?"

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

 

 

"switch ๋ฌธ์—์„œ break๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”? ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • switch์— break๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‹ค์Œ ์กฐ๊ฑด๋ฌธ๋„ ๋น„๊ต๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ break๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

"์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ์š”? if-else์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์€?"

  • ๋‹จ์ˆœ trueor false๋งŒ ํŒ๋ณ„ํ•˜์—ฌ ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋‹ด๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ์žฅ๋‹จ์ ์€ if-else์— ๋น„ํ•ด ๋ผ์ธ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜ ์˜คํžˆ๋ ค ์ด ์ ์œผ๋กœ ์ธํ•ด ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฐ˜๋ณต๋ฌธ

 

"for๋ฌธ๊ณผ while๋ฌธ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • for๋ฌธ์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ์‹, ๋ฐ˜๋ณต ํšŸ์ˆ˜, ๋ฐ˜๋ณต ์กฐ๊ฑด ์‹์ด ์กด์žฌํ•˜์—ฌ ๋ฐ˜๋ณตํšŸ์ˆ˜๋ฅผ ์ผ์ •ํ•œ ์ˆ˜๋กœ ์ œํ•œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. while๋„ ๋ณ€์ˆ˜์™€ break๋ฅผ ์ด์šฉํ•˜์—ฌfor๋ฌธ ์ฒ˜๋Ÿผ ์ œํ•œ๋œ ๋ฐ˜๋ณต๋ฌธ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์กฐ๊ฑด์„ ๊ฑธ์ง€ ์•Š๊ณ  ๋ฌดํ•œ๋ฃจํ”„๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํšŸ์ˆ˜์˜ ์ œํ•œ์ด ์—†๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” while์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๊ณ  ํšŸ์ˆ˜์˜ ์ œํ•œ์ด ํ•„์š”ํ•˜๊ณ  ์ผ์ • ํšŸ์ˆ˜ ์•ˆ์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ for๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค.

 

 

"break์™€ continue์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด์ฃผ์„ธ์š”."

  • break๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋น ์ ธ๋‚˜์˜ค๊ฒŒ ํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋ฉฐ continue๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  continue ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์‹œ ์กฐ๊ฑด์‹์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ํšŒ์ฐจ์˜ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ƒํ™œ์—์„œ๋„ ๊ทธ ์˜ˆ๋ฅผ ์ ‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์œˆ๋„์šฐ os ํ™˜๊ฒฝ์—์„œ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ด๋–ค ํด๋”์— ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•  ๋•Œ ๋™์ผํ•œ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์–ด ํ™”๋ฉด์— ๋…ธ์ถœ๋˜๋Š” ์•Œ๋ฆผ์ฐฝ์„ ๋ณด์‹  ์  ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ๊ทธ ์•Œ๋ฆผ ์ฐฝ์—์„œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋ฒ„ํŠผ์€ continue์ด๊ณ  ์ค‘์ง€๋ฒ„ํŠผ์€ break๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฎ์–ด์“ฐ๊ธฐ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ continue์ดํ›„์˜ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

"๋ฌดํ•œ ๋ฃจํ”„๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?"

  • ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”์ธ ๋ฃจํ”„, ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋Œ€๊ธฐ, ๋ฉ”์‹œ์ง€ ํ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋ก :
    • ๋ช…ํ™•ํ•œ ์ข…๋ฃŒ ์กฐ๊ฑด ๊ตฌํ˜„ (break ์กฐ๊ฑด)
    • timeout ์„ค์ •์œผ๋กœ ๋ฌดํ•œ ๋Œ€๊ธฐ ๋ฐฉ์ง€
    • ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ
    • ์ฃผ๊ธฐ์ ์ธ ์ƒํƒœ ์ฒดํฌ
    • try-catch๋กœ ์˜ˆ์™ธ ์ƒํ™ฉ ์ฒ˜๋ฆฌ
      ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์„ฑ๋Šฅ๊ณผ ์ตœ์ ํ™”

 

"๋ฐ˜๋ณต๋ฌธ์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ๋“ค์€ ๋ฌด์—‡์ธ๊ฐ€์š”?"

  • ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ:
    • ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ถˆ๋ณ€ ๊ฐ’์€ ๋ฐ˜๋ณต๋ฌธ ์™ธ๋ถ€๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
    • Collection ์ ‘๊ทผ ์‹œ ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

 

"switch ๋ฌธ๊ณผ if-else ๋ฌธ์˜ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ๊ณผ JVM์˜ ์ตœ์ ํ™” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • switch๋ฌธ์€ jump table์„ ์‚ฌ์šฉํ•˜์—ฌ O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ถ„๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • if-else๋Š” ์กฐ๊ฑด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋ฏ€๋กœ O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ถ„๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ switch๋ฌธ์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

"jump table ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • jump table(์ ํ”„ ํ…Œ์ด๋ธ”)์€ switch ๋ฌธ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  • ์ž‘๋™ ๋ฐฉ์‹
// ์ด๋Ÿฐ switch๋ฌธ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
switch (value) {
    case 1: return "ONE";
    case 2: return "TWO";
    case 3: return "THREE";
}

// ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋Ÿฐ ์ ํ”„ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
// address[1] -> code for case 1
// address[2] -> code for case 2
// address[3] -> code for case 3
  • O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„: value ๊ฐ’์œผ๋กœ ๋ฐ”๋กœ ํ•ด๋‹น case์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • if-else์™€ ๋‹ฌ๋ฆฌ ์กฐ๊ฑด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Œ

 

 

"String ์—ฐ์‚ฐ์—์„œ + ์—ฐ์‚ฐ์ž ๋Œ€์‹  StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ JVM ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • String์€ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋ผ + ์—ฐ์‚ฐ๋งˆ๋‹ค ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋˜๊ณ  ๊ธฐ์กด String ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.
  • StringBuilder๋Š” ๊ฐ€๋ณ€(mutable) ๊ฐ์ฒด๋ผ ๋™์ผ ๊ฐ์ฒด ๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€๋ณ€ ํฌ๊ธฐ์˜ char[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • append() ์‹œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ํ•˜๋‚˜์˜ ๊ฐ์ฒด ๋‚ด์—์„œ ๋ฌธ์ž์—ด ์กฐ์ž‘์ด ์ด๋ฃจ์–ด์ ธ ์ถ”๊ฐ€ ๊ฐ์ฒด ์ƒ์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
  String str = "a" + "b" + "c"; // ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ String ๊ฐ์ฒด ์ƒ์„ฑ
  StringBuilder sb = new StringBuilder()
      .append("a").append("b").append("c"); // ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉ
  • ์ •๋ฆฌํ•˜์ž๋ฉด String + ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„ ๊ฐ์ฒด๋“ค์˜ ์ƒ์„ฑ๊ณผ GC๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , StringBuilder์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ๊ฐ์ฒด ์‚ฌ์šฉ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

"๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€?"

  • ๋ฌธ์ž์—ด์„ + ์—ฐ์‚ฐ์ž๋กœ ๊ณ„์† ์—ฐ๊ฒฐํ•˜๋ฉด ๋งค๋ฒˆ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ๋ฐฉ์•ˆ์œผ๋กœ๋Š” StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

"๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋””๋ฒ„๊น…ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

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

 

"๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€?"

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜์—ฌ batch ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

์„ค๊ณ„์™€ ๊ตฌํ˜„ ํŒจํ„ด

 

"switch ๋ฌธ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ OOP ๊ด€์ ์—์„œ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. (Strategy ํŒจํ„ด ๋“ฑ)"

// Before: switch ๋ฌธ ์‚ฌ์šฉ
public class PaymentProcessor {
    public void processPayment(String type) {
        switch (type) {
            case "CREDIT":
                processCreditPayment();
                break;
            case "DEBIT":
                processDebitPayment();
                break;
            case "KAKAO":
                processKakaoPayment();
                break;
        }
    }
}
  1. Strategy ํŒจํ„ด
// After: Strategy ํŒจํ„ด ์ ์šฉ
interface PaymentStrategy {
    void process();
}

class CreditPayment implements PaymentStrategy {
    public void process() {
        // ์‹ ์šฉ์นด๋“œ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ
    }
}

class DebitPayment implements PaymentStrategy {
    public void process() {
        // ์ง๋ถˆ์นด๋“œ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ
    }
}

class KakaoPayment implements PaymentStrategy {
    public void process() {
        // ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ์ฒ˜๋ฆฌ
    }
}

class PaymentProcessor {
    private final Map<String, PaymentStrategy> strategies = new HashMap<>();

    public PaymentProcessor() {
        strategies.put("CREDIT", new CreditPayment());
        strategies.put("DEBIT", new DebitPayment());
        strategies.put("KAKAO", new KakaoPayment());
    }

    public void processPayment(String type) {
        PaymentStrategy strategy = strategies.get(type);
        strategy.process();
    }
}
1. ์ƒˆ๋กœ์šด ํƒ€์ž… ์ถ”๊ฐ€๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. (OCP - Open-Closed Principle)
    - ์ƒˆ๋กœ์šด ๊ฒฐ์ œ ๋ฐฉ์‹ ์ถ”๊ฐ€ ์‹œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    - ๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
2. ๊ฐ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ณ„๋„ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. (SRP - Single Responsibility Principle)
    - ๊ฐ ๊ฒฐ์ œ ๋ฐฉ์‹๋ณ„ ๋กœ์ง์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    - ์ฝ”๋“œ์˜ ์‘์ง‘๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ํšจ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
3. ์‹คํ–‰ ์‹œ์ ์— ์ „๋žต์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์œ ์—ฐ์„ฑ ์ฆ๊ฐ€)
    - ๋Ÿฐํƒ€์ž„์— ๋‹ค๋ฅธ ๊ฒฐ์ œ ๋ฐฉ์‹์œผ๋กœ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

"๋ฐ˜๋ณต๋ฌธ ์ฒ˜๋ฆฌ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ต์ฐฉ ์ƒํƒœ(deadlock)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค..!
  • ์ž์› ํ• ๋‹น ์ˆœ์„œ ์ผ๊ด€์„ฑ ์œ ์ง€
    • Lock Ordering ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์„ ํ•ญ์ƒ ์ผ์ •ํ•œ ์ˆœ์„œ๋กœ ํš๋“ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆœํ™˜ ๋Œ€๊ธฐ ์กฐ๊ฑด์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์˜ˆ๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฝ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ํ•ญ์ƒ ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ๋ฝ๋ถ€ํ„ฐ ๋†’์€ ๋ฒˆํ˜ธ์˜ ๋ฝ ์ˆœ์œผ๋กœ ํš๋“ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž„์•„์›ƒ ๋ฐ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„
    • ์ž์› ํš๋“ ์‹œ ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•˜๊ณ , ์ผ์ • ์‹œ๊ฐ„ ๋‚ด์— ์ž์›์„ ํš๋“ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ  ๋‚˜์ค‘์— ์žฌ์‹œ๋„ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ฌดํ•œ์ • ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ํ™œ์šฉ
    • Resource Allocation Graph๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์› ํ• ๋‹น ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ˆœํ™˜ ๋Œ€๊ธฐ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ž ์žฌ์ ์ธ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์‚ฌ์ „์— ๊ฐ์ง€ํ•˜๊ณ  ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์œ ์™€ ๋Œ€๊ธฐ ์กฐ๊ฑด ๋ฐฉ์ง€
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž์›์„ ํ•œ ๋ฒˆ์— ์š”์ฒญํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ผ๋ถ€ ์ž์›๋งŒ ๋ณด์œ ํ•œ ์ฑ„ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด ๋ฐฉ๋ฒ•์€ ์ž์› ํ™œ์šฉ๋„๊ฐ€ ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์„ ์  ์กฐ๊ฑด ์™„ํ™”
    • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ž์›์„ ์„ ์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์งˆ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ž์› ํ•ด์ œ์™€ ์žฌํš๋“์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ธ‰ ๋™์‹œ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ™œ์šฉ
    • ๋ฝ ํ”„๋ฆฌ(lock-free) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ํŠธ๋žœ์žญ์…˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ๋™์‹œ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ฒ˜๋ฆฌ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

"์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ if-else ๋ฌธ์„ ์–ด๋–ป๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด ์ข‹์„๊นŒ์š”?"

  • ์กฐ๊ฑด์˜ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด:
    1. guard clause ํŒจํ„ด ์ ์šฉ (early return) ํ•ฉ๋‹ˆ๋‹ค.
    2. ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ์˜๋ฏธ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    3. ๊ณตํ†ต ์กฐ๊ฑด์„ ์ƒ์œ„๋กœ ์ถ”์ถœํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    4. ์กฐ๊ฑด์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐํ˜•(enum) ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    5. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ switch๋ฌธ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

 

"๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•  ๋•Œ ์ฃผ๋กœ ์–ด๋–ค ์ ๋“ค์„ ์ฒดํฌํ•˜์‹œ๋‚˜์š”?"

  • ์ค‘๋ณต๋˜๋Š” ์—ฐ์‚ฐ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ์ค‘์ฒฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์ด ๋ช…ํ™•ํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ฌธ์˜ ์ˆœ์„œ๊ฐ€ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์กฐ๊ฑด์„ ๋จผ์ € ์ฒดํฌ).

 

 

JVM๊ณผ ๋‚ด๋ถ€ ๋™์ž‘

 

"JVM์ด switch ๋ฌธ์„ ์ปดํŒŒ์ผํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค..!

ํ…Œ์ด๋ธ”์Šค์œ„์น˜(tableswitch)์™€ ๋ฃฉ์—…์Šค์œ„์น˜(lookupswitch)

JVM์€ switch ๋ฌธ์„ ๋‘ ๊ฐ€์ง€ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ค‘ ํ•˜๋‚˜๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค

  1. ํ…Œ์ด๋ธ”์Šค์œ„์น˜(tableswitch): case ๊ฐ’๋“ค์ด ์„œ๋กœ ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋” ๋น ๋ฅธ ์‹คํ–‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฃฉ์—…์Šค์œ„์น˜(lookupswitch): case ๊ฐ’๋“ค์ด ์„œ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

switch (value) {
    case 1 -> "one";
    case 2 -> "two";
    case 4 -> "four";
    default -> "other";
}

์œ„ ์ฝ”๋“œ๋Š” ํ…Œ์ด๋ธ”์Šค์œ„์น˜๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

switch (value) {
    case 1 -> "one";
    case 10 -> "ten";
    case 100 -> "one hundred";
    default -> "other";
}

์œ„ ์ฝ”๋“œ๋Š” ๋ฃฉ์—…์Šค์œ„์น˜๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

 

์ ํ”„ ํ…Œ์ด๋ธ” ์ตœ์ ํ™”

์ปดํŒŒ์ผ๋Ÿฌ๋Š” switch ๋ฌธ์„ ์ ํ”„ ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ง์ ‘ ํ•ด๋‹น case๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” if-else ๋ฌธ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ธ ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

๋Ÿฐํƒ€์ž„ ์ตœ์ ํ™”

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

 

"String equals() ๋ฉ”์†Œ๋“œ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์„ค๋ช…ํ•˜๊ณ , ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ๋“ค์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • "String equals() ๋ฉ”์†Œ๋“œ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„"
    1. ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „์— ์ˆ˜ํ–‰ํ•˜๋Š” ๋น ๋ฅด๊ฒŒ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
      • ๋™์ผ ๊ฐ์ฒด ์ฐธ์กฐ์ธ์ง€ ํ™•์ธ (this == obj)
      • null ์ฒดํฌ
    2. ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
      • ๊ธธ์ด ๋น„๊ต
      • ๋ฌธ์ž ๋ฐฐ์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ต
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ์•ˆ:
    • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์€ String Pool ํ™œ์šฉ
    • ๋ถˆํ•„์š”ํ•œ String ๊ฐ์ฒด ์ƒ์„ฑ ์ตœ์†Œํ™”

"String Pool์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”."

  • String Pool(๋˜๋Š” String Constant Pool)์€ ์ž๋ฐ”์˜ ํŠน๋ณ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์ €์žฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ์ž‘๋™ ๋ฐฉ์‹
      1. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์ƒ์„ฑํ•  ๋•Œ(์˜ˆ: String str = "hello"), JVM์€ ๋จผ์ € String Pool์—์„œ ๋™์ผํ•œ ๋ฌธ์ž์—ด์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
      2. ๋™์ผํ•œ ๋ฌธ์ž์—ด์ด ์žˆ์œผ๋ฉด ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      3. ์—†์œผ๋ฉด String Pool์— ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • String Pool์˜ ์žฅ์ 
      • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ: ๋™์ผํ•œ ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ
      • ์„ฑ๋Šฅ ํ–ฅ์ƒ: ๋ฌธ์ž์—ด ๋น„๊ต ์‹œ ๊ฐ์ฒด ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ด์ 

"๋ฐ˜๋ณต๋ฌธ ์‹คํ–‰ ์‹œ JVM์˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์–ด๋–ค ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‚˜์š”?"

  • ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค..!
  • ๋ฃจํ”„ ์–ธ๋กค๋ง (Loop Unrolling)
    • ๋ฃจํ”„ ์–ธ๋กค๋ง์€ ๋ฐ˜๋ณต๋ฌธ์˜ ๋ณธ๋ฌธ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณต์‚ฌํ•˜์—ฌ ํŽผ์น˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
    • ์ด์ 
      • ๋ฐ˜๋ณต ํšŸ์ˆ˜ ๊ฐ์†Œ๋กœ ์ธํ•œ ๋ถ„๊ธฐ ์˜ˆ์ธก ์‹คํŒจ ๊ฐ์†Œ
      • ๋ช…๋ น์–ด ํŒŒ์ดํ”„๋ผ์ธ ์ตœ์ ํ™”
      • ๋ช…๋ น์–ด ์ˆ˜์ค€ ๋ณ‘๋ ฌ์„ฑ ํ–ฅ์ƒ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ

for(int i = 0; i < numIterations; i++) {
    METRICS.gauge("test.metric", i);
}

์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for(int i = 0; i < numIterations; i += 5) {
    METRICS.gauge("test.metric", i);
    METRICS.gauge("test.metric", i+1);
    METRICS.gauge("test.metric", i+2);
    METRICS.gauge("test.metric", i+3);
    METRICS.gauge("test.metric", i+4);
}
  • ๋ฒ”์œ„ ๊ฒ€์‚ฌ ์ œ๊ฑฐ (Range Check Elimination)
    • JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐฐ์—ด ์ ‘๊ทผ ์‹œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ๋ฒ”์œ„ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” i๊ฐ€ ํ•ญ์ƒ arr.length ๋ฏธ๋งŒ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฐ์—ด ์ ‘๊ทผ ์‹œ ๋ฒ”์œ„ ๊ฒ€์‚ฌ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
  • ๋ฃจํ”„ ๋ณ€ํ™˜ (Loop Transformation)
    • JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” long ํƒ€์ž…์˜ ๋ฐ˜๋ณต๋ฌธ์„ int ํƒ€์ž…์˜ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ธฐ์กด์˜ int ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฃจํ”„ ๋ถˆ๋ณ€ ์ฝ”๋“œ ์ด๋™ (Loop-Invariant Code Motion)
    • ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณต๋ฌธ ๋ฐ–์œผ๋กœ ์ด๋™์‹œ์ผœ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ๋ฃจํ”„ ๋ถ„๋ฆฌ (Loop Unswitching)
    • ์กฐ๊ฑด๋ฌธ์„ ํฌํ•จํ•œ ๋ฃจํ”„๋ฅผ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ๋ฃจํ”„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ถ„๊ธฐ ์˜ˆ์ธก์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒกํ„ฐํ™” (Vectorization)
    • SIMD (Single Instruction, Multiple Data) ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•๋“ค์€ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์— ์ฝ”๋“œ์˜ ์‹คํ–‰ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๊ณ , "ํ•ซ์ŠคํŒŸ"์œผ๋กœ ํŒ๋‹จ๋˜๋Š” ๋ถ€๋ถ„์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Java ํ”„๋กœ๊ทธ๋žจ์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํŒ€ ํ˜‘์—… ๊ด€๋ จ

 

"์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ์„ ๋ฆฌ๋ทฐํ•  ๋•Œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ”ผ๋“œ๋ฐฑํ•˜์‹œ๋‚˜์š”?"

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

 

"ํŒ€์—์„œ ํ†ต์ผ๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์œ„ํ•ด ์กฐ๊ฑด๋ฌธ/๋ฐ˜๋ณต๋ฌธ ์ž‘์„ฑ ์‹œ ์–ด๋–ค ๊ทœ์น™์„ ๋งŒ๋“ค์–ด ๋ณด์…จ๋‚˜์š”?"

  • ์กฐ๊ฑด๋ฌธ ๋ฐ ๋ฐ˜๋ณต๋ฌธ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ๋”ฐ๋กœ ์—†์—ˆ์œผ๋‚˜ ๋งŒ๋“ ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์„ธ์šฐ๊ฒ ์Šต๋‹ˆ๋‹ค.
    • ์กฐ๊ฑด๋ฌธ
      • ๋ณต์žกํ•œ ์กฐ๊ฑด์€ ๋ณ„๋„ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœ
      • early return ํŒจํ„ด ์‚ฌ์šฉ
    • ๋ฐ˜๋ณต๋ฌธ
      • ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์€ ์ตœ๋Œ€ 2๋‹จ๊ณ„๊นŒ์ง€๋งŒ ํ—ˆ์šฉ
      • ๋ฐ˜๋ณต๋ฌธ ๋‚ด ๋กœ์ง์€ ๋ณ„๋„ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌ
๋ฐ˜์‘ํ˜•