🎯
javascript handbook
  • Part.01 Hello World
    • 0. μ‹œμž‘ν•˜κΈ° 전에..
      • Javascript ν™˜κ²½ μ„€μ •
      • μ½”λ“œ ꡬ쑰
      • 엄격 λͺ¨λ“œ
      • λ³€μˆ˜? ν‘œν˜„μ‹? λ¬Έ?
    • 1. μžλ£Œμ™€ λ³€μˆ˜
      • λ³€μˆ˜μ™€ μƒμˆ˜
      • μžλ£Œν˜•
      • ν˜•λ³€ν™˜
      • κΈ°λ³Έ μ—°μ‚°μžμ™€ μˆ˜ν•™
      • 비ꡐ μ—°μ‚°μž
      • λ…Όλ¦¬μ—°μ‚°μž
  • Part 02. 쑰건문
    • ifλ¬Έ
    • switchλ¬Έ
  • Part 03. λ°°μ—΄κ³Ό 반볡문
    • λ°°μ—΄
    • λ°°μ—΄κ³Ό λ©”μ„œλ“œ
    • 반볡문
  • Part 04. ν•¨μˆ˜
    • ν•¨μˆ˜
    • ν•¨μˆ˜ ν‘œν˜„μ‹
    • ν™”μ‚΄ν‘œ ν•¨μˆ˜ κΈ°λ³Έ
    • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜μ™€ μŠ€ν”„λ ˆλ“œ 문법
  • Part 05. 객체 기본문법
    • 객체
    • 참쑰에 μ˜ν•œ 객체 볡사
    • λ©”μ„œλ“œμ™€ this
    • new μ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜
  • Part 06. 객체 심화 문법
    • 객체 순회
    • ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή
    • 과제
Powered by GitBook
On this page
  • 문법
  • μ˜ˆμ‹œ
  • μ—¬λŸ¬ 개의 "case"λ¬Έ λ¬ΆκΈ°
  • μžλ£Œν˜•μ˜ μ€‘μš”μ„±
  1. Part 02. 쑰건문

switch문

Previousifλ¬ΈNextPart 03. λ°°μ—΄κ³Ό 반볡문

Last updated 2 years ago

볡수의 if 쑰건문은 switch문으둜 λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆλ‹€.

switch문을 μ‚¬μš©ν•œ 비ꡐ법은 νŠΉμ • λ³€μˆ˜λ₯Ό λ‹€μ–‘ν•œ μƒν™©μ—μ„œ 비ꡐ할 수 있게 ν•΄μ€λ‹ˆλ‹€. μ½”λ“œ μžμ²΄κ°€ 비ꡐ 상황을 잘 μ„€λͺ…ν•œλ‹€λŠ” μž₯점도 μžˆμŠ΅λ‹ˆλ‹€.

switch문은 ν•˜λ‚˜ μ΄μƒμ˜ case문으둜 κ΅¬μ„±λ©λ‹ˆλ‹€. λŒ€κ°œ default문도 μžˆμ§€λ§Œ, μ΄λŠ” ν•„μˆ˜λŠ” μ•„λ‹™λ‹ˆλ‹€.

μ˜ˆμ‹œ:

switch(x) {
  case 'value1':  // if (x === 'value1')
    ...
    [break]

  case 'value2':  // if (x === 'value2')
    ...
    [break]

  default:
    ...
    [break]
}
  • λ³€μˆ˜ x의 κ°’κ³Ό 첫 번째 case문의 κ°’ 'value1'λ₯Ό 일치 λΉ„κ΅ν•œ ν›„, 두 번째 case문의 κ°’ 'value2'와 λΉ„κ΅ν•©λ‹ˆλ‹€. 이런 과정은 계속 μ΄μ–΄μ§‘λ‹ˆλ‹€.

  • caseλ¬Έμ—μ„œ λ³€μˆ˜ x의 κ°’κ³Ό μΌμΉ˜ν•˜λŠ” 값을 찾으면 ν•΄λ‹Ή case 문의 μ•„λž˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€. μ΄λ•Œ, break문을 λ§Œλ‚˜κ±°λ‚˜ switch 문이 λλ‚˜λ©΄ μ½”λ“œμ˜ 싀행은 멈μΆ₯λ‹ˆλ‹€.

  • κ°’κ³Ό μΌμΉ˜ν•˜λŠ” case문이 μ—†λ‹€λ©΄, defaultλ¬Έ μ•„λž˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€(default 문이 μžˆλŠ” 경우).

μ‹€μ œ μ‹€ν–‰ κ°€λŠ₯ν•œ switchλ¬Έ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ΄…μ‹œλ‹€. μ•„λž˜ μ˜ˆμ‹œμ—μ„  κ°•μ‘°λœ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” 값보닀 μž‘μŠ΅λ‹ˆλ‹€.' );
    break;
  case 4:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” κ°’κ³Ό μΌμΉ˜ν•©λ‹ˆλ‹€.' );
    break;
  case 5:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” 값보닀 ν½λ‹ˆλ‹€.' );
    break;
  default:
    alert( "μ–΄λ–€ 값인지 νŒŒμ•…μ΄ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." );
}

switch문은 a의 값인 4와 첫 번째 case문의 값인 3을 λΉ„κ΅ν•©λ‹ˆλ‹€. 두 값은 κ°™μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‹€μŒ case문으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€.

a와 κ·Έλ‹€μŒ case문의 값인 4λŠ” μΌμΉ˜ν•©λ‹ˆλ‹€. λ”°λΌμ„œ break문을 λ§Œλ‚  λ•ŒκΉŒμ§€ case 4 μ•„λž˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

caseλ¬Έ μ•ˆμ— break문이 μ—†μœΌλ©΄ 쑰건에 λΆ€ν•©ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό λ”°μ§€μ§€ μ•Šκ³  μ΄μ–΄μ§€λŠ” case문을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

break문이 μ—†λŠ” 경우 μ–΄λ–€ 일이 μΌμ–΄λ‚˜λŠ”μ§€ μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ΄…μ‹œλ‹€.

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” 값보닀 μž‘μŠ΅λ‹ˆλ‹€.' );
  case 4:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” κ°’κ³Ό μΌμΉ˜ν•©λ‹ˆλ‹€.' );
  case 5:
    alert( 'λΉ„κ΅ν•˜λ €λŠ” 값보닀 ν½λ‹ˆλ‹€.' );
  default:
    alert( "μ–΄λ–€ 값인지 νŒŒμ•…μ΄ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." );
}

μœ„ μ˜ˆμ‹œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ•„λž˜ 3개의 alert문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

alert( 'λΉ„κ΅ν•˜λ €λŠ” κ°’κ³Ό μΌμΉ˜ν•©λ‹ˆλ‹€.' );
alert( 'λΉ„κ΅ν•˜λ €λŠ” 값보닀 ν½λ‹ˆλ‹€.' );
alert( "μ–΄λ–€ 값인지 νŒŒμ•…μ΄ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." );

switch/case문의 μΈμˆ˜μ—” μ–΄λ–€ ν‘œν˜„μ‹μ΄λ“  올 수 μžˆμŠ΅λ‹ˆλ‹€.

switchλ¬Έκ³Ό case문은 λͺ¨λ“  ν˜•νƒœμ˜ ν‘œν˜„μ‹μ„ 인수둜 λ°›μŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ:

let a = "1";
let b = 0;

switch (+a) {
  case b + 1:
    alert("ν‘œν˜„μ‹ +aλŠ” 1, ν‘œν˜„μ‹ b+1λŠ” 1μ΄λ―€λ‘œ 이 μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.");
    break;

  default:
    alert("이 μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.");
}

ν‘œν˜„μ‹ +aλ₯Ό ν‰κ°€ν•˜λ©΄ 1이 λ©λ‹ˆλ‹€. 이 값은 첫 번째 case문의 ν‘œν˜„μ‹ b + 1을 ν‰κ°€ν•œ κ°’(1)κ³Ό μΌμΉ˜ν•˜μ£ . λ”°λΌμ„œ 첫 번째 caseλ¬Έ μ•„λž˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

μ½”λ“œκ°€ 같은 case문은 ν•œλ° 묢을 수 μžˆμŠ΅λ‹ˆλ‹€.

case 3κ³Ό case 5μ—μ„œ μ‹€ν–‰ν•˜λ €λŠ” μ½”λ“œκ°€ 같은 κ²½μš°μ— λŒ€ν•œ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ΄…μ‹œλ‹€.

let a = 3;

switch (a) {
  case 4:
    alert('계산이 λ§žμŠ΅λ‹ˆλ‹€!');
    break;

  case 3: // (*) 두 case문을 묢음
  case 5:
    alert('계산이 ν‹€λ¦½λ‹ˆλ‹€!');
    alert("μˆ˜ν•™ μˆ˜μ—…μ„ λ‹€μ‹œ λ“€μ–΄λ³΄λŠ”κ±Έ ꢌ유 λ“œλ¦½λ‹ˆλ‹€.");
    break;

  default:
    alert('계산 κ²°κ³Όκ°€ μ΄μƒν•˜λ„€μš”.');
}

case 3κ³Ό case 5λŠ” λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

switch/caseλ¬Έμ—μ„œ break문이 μ—†λŠ” κ²½μš°μ—” 쑰건에 상관없이 λ‹€μŒ case문이 μ‹€ν–‰λ˜λŠ” λΆ€μž‘μš©μ΄ λ°œμƒν•©λ‹ˆλ‹€. μœ„ μ˜ˆμ‹œμ—μ„œ case 3이 참인 κ²½μš°μ—” (*)둜 ν‘œμ‹œν•œ 쀄 μ•„λž˜μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ”λ°, κ·Έ μ•„λž˜ 쀄엔 case 5κ°€ 있고 break문도 μ—†κΈ° λ•Œλ¬Έμ— 12번째 μ€„μ˜ break문을 λ§Œλ‚  λ•ŒκΉŒμ§€ μ½”λ“œλŠ” 계속 μ‹€ν–‰λ©λ‹ˆλ‹€.

switch문은 일치 λΉ„κ΅λ‘œ 쑰건을 ν™•μΈν•©λ‹ˆλ‹€. λΉ„κ΅ν•˜λ €λŠ” κ°’κ³Ό case문의 κ°’μ˜ ν˜•κ³Ό 값이 κ°™μ•„μ•Ό ν•΄λ‹Ή case문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

μ˜ˆμ‹œλ₯Ό 톡해 switchλ¬Έμ—μ„œ μžλ£Œν˜•μ΄ μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ μ‚΄νŽ΄λ³΄λ„λ‘ ν•©μ‹œλ‹€.

let arg = prompt("값을 μž…λ ₯ν•΄μ£Όμ„Έμš”.");
switch (arg) {
  case '0':
  case '1':
    alert( '0μ΄λ‚˜ 1을 μž…λ ₯ν•˜μ…¨μŠ΅λ‹ˆλ‹€.' );
    break;

  case '2':
    alert( '2λ₯Ό μž…λ ₯ν•˜μ…¨μŠ΅λ‹ˆλ‹€.' );
    break;

  case 3:
    alert( '이 μ½”λ“œλŠ” μ ˆλŒ€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!' );
    break;
  default:
    alert( 'μ•Œ 수 μ—†λŠ” 값을 μž…λ ₯ν•˜μ…¨μŠ΅λ‹ˆλ‹€.' );
}
  1. 0μ΄λ‚˜ 1을 μž…λ ₯ν•œ κ²½μš°μ—” 첫 번째 alert문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

  2. 2λ₯Ό μž…λ ₯ν•œ κ²½μš°μ—” 두 번째 alert문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

  3. 3을 μž…λ ₯ν•˜μ˜€λ”λΌλ„ μ„Έ 번째 alert문은 μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•žμ„œ 배운 바와 같이 prompt ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ μž…λ ₯ ν•„λ“œμ— κΈ°μž¬ν•œ 값을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•΄ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 숫자 3을 μž…λ ₯ν•˜λ”λΌλ„ prompt ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ '3'을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 그런데 μ„Έ 번째 case문에선 μ‚¬μš©μžκ°€ μž…λ ₯ν•œ κ°’κ³Ό μˆ«μžν˜• 3을 λΉ„κ΅ν•˜λ―€λ‘œ, ν˜• μžμ²΄κ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— case 3 μ•„λž˜μ˜ μ½”λ“œλŠ” μ ˆλŒ€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  default문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

좜처 :

문법
μ˜ˆμ‹œ
μ—¬λŸ¬ 개의 "case"λ¬Έ λ¬ΆκΈ°
μžλ£Œν˜•μ˜ μ€‘μš”μ„±
Modern Javascript νŠœν† λ¦¬μ–Ό