[JavaScript] switch문 작성법

switch문의 사용이유

복수의 if문을 사용하여 프로그램 흐름을 제어할 수 있지만 switch를 사용한다면 단일 값을 다양한 상황에서 비교할 때 코드 자체에서 비교 상황을 잘 설명하는 장점이 있습니다.

기본 구조

let fruit = 'apple';

switch (fruit) {
  case 'banana':
    console.log('바나나입니다.');
    break;
  case 'apple':
    console.log('사과입니다.');
    break;
  case 'orange':
    console.log('오렌지입니다.');
    break;
  default:
    console.log('알 수 없는 과일입니다.');
}

변수 fruit의 값과 첫 번째 case문의 값 banana를 비교한 후, 두 번째 case문의 값 apple과 비교합니다. 비교를 할 때 엄격한 비교(===)를 사용하여  비교합니다. case와 일치하는 값을 찾으면 해당 case문의 아래 코드가 실행됩니다. 이때, break문을 만나거나 switch 문이 끝나면 실행이 멈춥니다. 값이 일치하는 case문이 없다면, default문 아래의 코드가 실행됩니다.

break 문이 없는 경우

case 2가 실행된 후 break가 존재하지 않기 때문에 그 이후의 모든 case와 default 코드가 실행됩니다.

let number = 2;

switch (number) {
  case 1:
    console.log('1입니다.');
  case 2:
    console.log('2입니다.');
  case 3:
    console.log('3입니다.');
  default:
    console.log('알 수 없는 숫자입니다.');
}

여러 case문 그룹화

여러 case가 동일한 코드를 실행될 경우 그룹화를 할 수 있습니다.

let grade = 'B';

switch (grade) {
  case 'A':
  case 'B':
    console.log('우수한 성적입니다.');
    break;
  case 'C':
    console.log('보통 성적입니다.');
    break;
  case 'D':
  case 'F':
    console.log('성적이 낮습니다. 더 노력하세요.');
    break;
  default:
    console.log('유효하지 않은 성적입니다.');
}

표현식을  사용한 switch문

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

switch (+a) {
  case b + 1:
    alert("표현식 +a는 1, 표현식 b+1는 1이므로 이 코드가 실행됩니다.");
    break;

  default:
    alert("이 코드는 실행되지 않습니다.");
}

자료형의 중요성

let input = prompt('값을 입력해주세요.');

switch (input) {
  case '0':
  case '1':
    console.log('0이나 1을 입력하셨습니다.');
    break;
  case '2':
    console.log('2를 입력하셨습니다.');
    break;
  case 3:
    console.log('이 코드는 절대 실행되지 않습니다.');
    break;
  default:
    console.log('알 수 없는 값을 입력하셨습니다.');
}

prompt는 항상 문자열을 반환합니다. 그래서 사용자가 3을 입력해도 case 3은 절대 실행되지 않습니다. 왜냐하면 switch문에서는 자료형까지 검사하는 엄격한 비교(===)를 사용하기 때문입니다.