제어문
조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.
조건문
주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정한다.
- if ... else 문: 논리적 참, 거짓으로 실행할 코드 블록을 결정할 때 사용
- switch 문: 다양한 케이스에 따라 실행할 코드 블록을 결정할 때 사용
break 키워드를 써야 해당 케이스 블록에서 탈출한다. 그렇지 않으면 실행 흐름이 다음 case 문으로 이동한다.
// 월을 영어로 변환한다. (11 → 'November')
var month = 11;
var monthName;
switch (month) {
case 1:
monthName = 'January';
break;
case 2:
monthName = 'February';
break;
case 3:
monthName = 'March';
break;
case 4:
monthName = 'April';
break;
case 5:
monthName = 'May';
break;
case 6:
monthName = 'June';
break;
case 7:
monthName = 'July';
break;
case 8:
monthName = 'August';
break;
case 9:
monthName = 'September';
break;
case 10:
monthName = 'October';
break;
case 11:
monthName = 'November';
break;
case 12:
monthName = 'December';
break;
default:
monthName = 'Invalid month';
}
console.log(monthName); // November
반복문
조건식의 평가 결과가 참이면 코드 블록을 실행하고, 이를 조건식이 거짓일 때까지 반복한다.
for과 while
for 문은 반복횟수가 명확할 때 주로 사용하고, while 문은 반복 횟수가 불명확할 때 주로 사용한다.
// for문을 이용한 무한루프
for (;;) {...}
// while문을 이용한 무한루프
while (true) {...}
do ... while 문
코드 블록을 먼저 실행하고 조건식을 평가한다. 따라서 코드 블록은 무조건 한번 이상 실행된다.
break 문
레이블 문, 반복문(for, for ... in, for ... of, while, do...while) 또는 switch 문의 코드 블록을 탈출한다.
레이블 문, 반복문, switch 문의 코드 블록 외에 break 문을 사용하면 SyntaxError(문법 에러)가 발생한다.
❓레이블 문: 식별자가 붙은 문
foo: console.log('foo'); // foo라는 레이블 식별자가 붙은 레이블 문
switch (foo) { // case 문과 default 문도 레이블 문이다.
case 1:
case 2:
default:
}
// foo라는 식별자가 붙은 레이블 블록문
foo: {
console.log(1);
break foo; // foo 레이블 블록문을 탈출한다.
console.log(2);
}
console.log('Done!');
중첩된 for 문의 내부 for 문에서 break 문을 실행하면 내부 for 문을 탈출하고 외부 for문으로 진입한다. 이때 내부 for문이 아닌 외부 for문을 탈출하려면 레이블 문을 사용한다.
// outer라는 식별자가 붙은 레이블 for 문
outer: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
// i + j === 3이면 외부 for 문을 탈출한다.
if (i + j === 3) break outer;
}
}
console.log('Done!');
레이블 문은 중첩된 for 문 외부로 탈출 시에는 유용하지만 그 외의 경우에서는 권장하지 않는다.
continue 문
반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
같은 기능을 continue를 사용하면 if문을 다음과 같이 더 짧게 쓸 수 있다.
// continue 문을 사용하지 않으면 if 문 내에 코드를 작성해야 한다.
for (var i = 0; i < string.length; i++) {
// 'l'이면 카운트를 증가시킨다.
if (string[i] === 'l') {
count++;
// code
// code
// code
}
}
// continue 문을 사용면 if 문 밖에 코드를 작성할 수 있다.
for (var i = 0; i < string.length; i++) {
// 'l'이 아니면 카운트를 증가시키지 않는다.
if (string[i] !== 'l') continue;
count++;
// code
// code
// code
}
참고
'JavaScript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
8. 객체 리터럴 (0) | 2022.07.25 |
---|---|
7. 타입 변환과 단축 평가 (0) | 2022.07.23 |
5. 연산자 (Operator) (0) | 2022.07.22 |
4. 데이터 타입 (Data Type) (0) | 2022.07.21 |
3. 표현식과 문 (0) | 2022.07.20 |