또다른 조건문인 switch 문에 대해 배워봅시다.
switch
switch문은 때때로 if문보다 가독성이 높은 조건문입니다. 하지만 if문에 비해 조건이 한정적입니다.
switch(주어진_값){ case 데이터1: 주어진_값이 데이터1과 같은 경우 이곳의 코드가 실행됨 break; case 데이터2: 주어진_값이 데이터2와 같은 경우 이곳의 코드가 실행됨 break; case 데이터3: 주어진_값이 데이터3과 같은 경우 이곳의 코드가 실행됨 break; default: 주어진_값이 어떠한 데이터와도 같지 않을 경우 이곳의 코드가 실행됨 }
- default 부분은 생략가능합니다. default 부분이 생략된 경우, 값이 어떠한 case에도 맞지 않는 경우 아무일을 하지 않고 switch문이 종료됩니다.
- case는 원하는 만큼 만들 수 있습니다. 단, 가장 먼저 만족된 case의 코드가 실행됩니다.
- switch문에 사용된 switch, case, break는 예약어입니다.
if 문은 조건의 참, 거짓을 판단하여 코드를 실행하지만, switch 문은 주어진 값과 case의 데이터를 비교한 후 두 값이 같은 경우에 해당 case의 코드를 실행합니다. 위 switch 문을 if 문으로 변경하면 다음과 같습니다.
if(주어진_값 == 데이터1){ 주어진_값이 데이터 1과 같은 경우 이곳의 코드가 실행됨 } else if(주어진_값 == 데이터2){ 주어진_값이 데이터 2와 같은 경우 이곳의 코드가 실행됨 } else if(주어진_값 == 데이터3){ 주어진_값이 데이터 3과 같은 경우 이곳의 코드가 실행됨 } else { 주어진_값이 어떠한 데이터와도 같지 않을 경우 이곳의 코드가 실행됨 }
반대로 if 문을 switch 문으로 변경하려면 if 문이 반드시 위와 같은 형태일 때만 switch로 변경할 수 있습니다. if 문이 == 이외의 연산자를 사용하는 경우, 하나의 값에 대한 비교가 아닌 경우는 switch로 변경할 수 없습니다.
또 한가지 switch만의 특징은 break 의 사용에 있습니다. switch 문에서 한번 case의 조건이 만족되면 그 다음의 case들의 조건은 무시되고 break가 나올 때까지 코드가 실행됩니다. 즉 다음과 같은 코드를 만들 수 있습니다.
function colorCalendar(day){ var color; switch(day){ case "mon": case "tue": case "wed": case "thu": case "fri": color = "white"; break; case "sat": color = "blue"; break; case "sun": color = "red"; break; } return color; }
colorCalendar함수는 요일("mon", "tue", "wed", "thu", "fri", "sat", "sun") 데이터를 받아 해당 요일의 달력 색깔을 return하는 함수입니다. case가 나온 후 break 없이 계속하여 다른 case들을 사용할 수 있습니다.
colorCalendar함수를 if 문으로 변경하면 다음과 같습니다.
function colorCalendar(day){ var color; if(day == "mon" || day == "tue" || day == "wed" || day == "thu" || day == "fri"){ color = "white"; } else if (day == "sat"){ color = "blue"; } else if (day == "sun"){ color = "red"; } return color; }
위 코드를 직접 작성해 보면 알겠지만, switch를 사용하는 것이 특수문자의 사용이 적어서 훨씬 쉽고 오타도 적게 납니다. 위 코드는 분기 후 할 일이 별로 없어도 큰 차이를 못느끼겠지만, 코드가 복잡해지면 if를 사용하는 것보다 switch를 사용하는 것이 보기에도 좋으므로 switch를 쓸 수 있는 곳에는 꼭 사용하도록 합시다.
'프로그래밍 입문' 카테고리의 다른 글
[자바스크립트 연습문제] 11-1, 2 풀이 (0) | 2018.10.18 |
---|---|
[자바스크립트 연습문제] 11-1 확장자 구별 함수, 11-2 날짜 수 구하는 함수 (0) | 2018.10.18 |
[자바스크립트 연습문제] 10-1 랜덤 정수 함수, 10-2 가위바위보 코드 (0) | 2018.10.12 |
자바스크립트로 프로그래밍 입문 10. 랜덤한 수 생성, 코드의 일반화, 주사위 게임, 주석 (0) | 2018.10.12 |
자바스크립트로 프로그래밍 입문 9. 조건문(Conditional Statement) 2 - else if, 논리연산자, 나머지 연산자 (0) | 2018.10.10 |