다중 선택문

switch에서 break를 빠뜨리면 무슨 일이 생길까?

설계에서 정할 것

갈래가 여럿이면 정할 것도 다섯

다중 선택문(multiple-way selection statement)은 여러 갈래 가운데 하나를 골라 실행합니다. 설계할 때 언어가 정해야 하는 것이 다섯 가지입니다.

case 하나에 딸린 코드를 여기서는 갈래라고 부르겠습니다. 이 강의가 따르는 교재의 말로는 선택 구간입니다.

C 계열 언어의 switch

값이 같은 case로 바로 갑니다

C, C++, Java, JavaScript의 switch입니다. 제어 식의 값과 같은 상수가 적힌 case로 가서 그 갈래를 실행합니다. 맞는 case가 없으면 default로 갑니다. default가 없으면 아무것도 실행하지 않습니다.

C의 switch는 제어 식이 정수 타입이어야 합니다. a(), b() 같은 함수 호출과 x의 값은 예시입니다.

break가 있으면

갈래 하나만 실행하고 나갑니다

갈래에는 문장을 여러 개 늘어놓을 수 있습니다. 끝에 둔 break는 switch 밖으로 나가라는 문장입니다. x가 2이면 b()만 실행하고 빠져나갑니다.

break가 없으면

아래 갈래로 흘러내립니다

C의 switch는 갈래가 끝나도 저절로 빠져나가지 않습니다. break가 없으면 실행이 아래 갈래로 이어집니다. 이것이 폴스루(fall-through)입니다. x는 2인데 c()와 d()까지 실행됩니다.

C#의 switch

C#은 흘러내림을 금지합니다

C#은 폴스루를 허용하지 않습니다. 모든 갈래는 break나 goto로 끝나야 합니다. C에서 흔하던 break 빠뜨리기 실수를 언어가 막은 것입니다. 제어 식과 case 값에는 문자열도 쓸 수 있습니다.

goto는 정해진 곳으로 실행을 옮기는 문장입니다(9편). 정적 의미론 규칙은 3편에서 봤습니다. 코드는 예시입니다.

Ruby의 case

처음 참이 된 when의 값을 냅니다

Ruby의 case는 when마다 불리언 식을 적습니다. 위에서부터 검사해 처음 참이 된 when의 값을 내고, 모두 거짓이면 else의 값을 냅니다. 값을 내는 식이라 변수에 바로 대입할 수 있습니다.

%는 나눈 나머지를 구하는 연산자입니다. 윤년을 가리는 교재의 예제이고, 연도는 예시 값입니다.

다음 편

컴퓨터는 맞는 갈래를 어떻게 찾아갈까요. 하나씩 견주는 방법만 있는 것이 아닙니다

5편맞는 갈래는 어떻게 찾아갈까? 7강 목록