[모던 자바스크립트 튜토리얼] 2.14 switch문

개발견 배도르만·2023년 3월 1일
0
post-thumbnail

🔻switch문

복수의 if 조건문은 switch문으로 바꿀 수 있다. 특정 변수를 다양한 상황에서 비교해야 할 경우 주로 사용한다.

문법

변수가 주어지고, 비교할 하나 이상의 case문으로 구성된다. default문은 필수가 아니다.

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

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

  default:
    ...
    [break]
}
  • 비교할 변수 x를 case문의 첫 번째 값 'value1'과 일치 비교 후, 다음 값 'value2'와 비교하는 방식이며 일치할 때까지 이러한 과정이 일어난다.
  • 변수와 일치하는 값을 찾으면 해당 case문의 코드가 실행된다. break문을 만나거나 switch문이 끝나면 실행이 종료된다.
  • 변수와 일치하는 값이 없을 때 default문이 실행된다(default문 있는 경우).
let a = 2 + 2;

switch (a) {
  case 3:
    alert( '비교하려는 값보다 작습니다.' );
    break;
  case 4: //a == 4 이므로 해당 case의 코드가 실행, break를 만나 종료
    alert( '비교하려는 값과 일치합니다.' );
    break;
  case 5:
    alert( '비교하려는 값보다 큽니다.' );
    break;
  default:
    alert( "어떤 값인지 파악이 되지 않습니다." );
}

위 예시는 4의 값을 비교하는 두 번째 case문이 실행된다.

실행 순서
1) 4의 값을 가진 a를 첫 번째 case의 값인 3과 비교. 불일치하므로 코드실행하지 않음
2) a를 두 번째 case의 값인 4와 비교. 일치하므로 코드실행(alert, break)

이 때, 주의해야할 점이 있다. 일치 case에 break를 사용하지 않으면 이후의 case들은 값 일치 비교를 하지 않고 코드가 실행된다.

let a = 2 + 2;

switch (a) {
  case 3:
    alert( '비교하려는 값보다 작습니다.' );
  case 4:
    alert( '비교하려는 값과 일치합니다.' );
  case 5:
    alert( '비교하려는 값보다 큽니다.' );
  default:
    alert( "어떤 값인지 파악이 되지 않습니다." );
}

즉, 위 예시에서는 case 4, case 5, default가 실행된다. break문이 없으므로 두 번째 case가 실행되고, 이후의 case들은 조건과 상관 없이 실행된다는 것이다.

switch/case문의 인수에는 어떤 표현식이든 올 수 있다.

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

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

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

여러 개의 case문 묶기

실행하려는 코드가 같은 case문은 묶어서 사용할 수 있다.

let a = 4;

switch (a) {
  case 4:
    alert('계산이 맞습니다!');
    break;

  case 3: // (*) 두 case문을 묶음
  case 5:
    alert('계산이 틀립니다!');
    alert("수학 수업을 다시 들어보는걸 권유 드립니다.");
    break;

  default:
    alert('수학 천재 배도르만!');
}

break가 없으면 이후의 case들을 무조건 실행한다는 원칙과 같은 맥락이다.

자료형의 중요성

switch문은 일치 비교로 조건을 확인하기 때문에 switch문의 인자와 case문의 값의 자료형이 같아야 case문이 실행된다.

let arg = prompt("값을 입력해주세요.");
switch (arg) {
  case '0':
  case '1':
    alert( '0이나 1을 입력하셨습니다.' );
    break;

  case '2':
    alert( '2를 입력하셨습니다.' );
    break;

  case 3:
    alert( '이 코드는 절대 실행되지 않습니다!' );
    break;
  default:
    alert( '알 수 없는 값을 입력하셨습니다.' );
}

case 3은 숫자형 3의 값인 case이다. prompt로 전달받은 값은 모두 문자열로 변환되어 반환되기 때문에 절대 실행될 수 없는 case인 것이다.

✍️ 정리

  • switch문은 변수를 여러 상황에 일치비교할 경우 사용한다.
  • 인자는 어떠한 표현식이든 사용 가능하다.
  • case가 실행되기 위해서는 값과 자료형이 일치해야 한다.
  • case에 break 지시자를 사용하지 않으면 이후의 case가 실행된다.
  • 위의 원리를 응용하여 같은 코드를 실행하는 여러 case를 묶어서 사용 가능하다.
profile
네 발 개발 개

0개의 댓글