제어문(control flow statement)은 조건에 따라 코드 블록을 실행, 또는 반복 실행할 때 사용한다. 코드 흐름을 인위적으로 제어할 수 있지만 가독성을 해친다는 단점이 있어 forEach, map 등의 함수를 사용하기도 한다(함수형 프로그래밍).
8. 1 블록문
블록문(block statement 또는 compound statement)은 여러 문을 중괄호로 묶은 것이다. 하나의 실행 단위로 취급된다. 단독으로도 사용될 수 있지만 일반적으로 제어문과 함수 정의에 사용된다. 중괄호로 묶은 블록문은 자체 종결성을 가져서 세미콜론을 붙이지 않는다.
8. 2 조건문
조건문(conditional statement)은 조건식의 평가 결과에 따라 블록문을 수행할지 결정한다. 조건식 평가 결과가 true이면 블록문을 실행한다. if...else문과 switch문이 있다.
8. 2. 1 if ... else문
조건식이 불리언으로 평가되어 블록문의 수행을 결정한다. else if는 선택사항으로 여러개가 될 수 있다.
if (조건식 1) {
// 조건식 1이 true일 경우 실행
} else if (조건식 2){
// 조건식 1이 false이고 조건식 2가 true일 경우 실행
} else {
// 모든 조건식이 false일 경우 실행
}
다른 것들과 마찬가지로 조건식의 평가 결과가 불리언이 아니라면 강제 타입변환 된다. 또한 코드블록 내부에 문이 하나만 존재한다면 중괄호를 생략할 수 있다.
8. 2. 2 switch문
주어진 표현식과 일치하는 표현식을 가지는 case문으로 실행 흐름을 전환한다. 상황에 따라 실행할 코드블록을 결정한다.
switch (표현식) {
case 표현식 1:
// 주어진 표현식의 평가값, 표현식 1의 평가값이 같다면 실행
break;
case 표현식 2:
// 주어진 표현식의 평가값, 표현식 2의 평가값이 같다면 실행
break;
default:
// 모든 case문의 표현식들이 일치하지 않을 때 실행
}
여기서 break로 case문을 탈출하지 않는다면 그 아래의 모든 case를 실행하는 폴스루(fall through)가 발생할 수 있다. 모든 case에 break는 필수적이고, default는 가장 아래에 위치해 의미가 없으므로 사용하지 않는다. 하지만 폴스루가 유용한 경우도 있다.
switch(month){
case 1: case 3: case 5... case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2: ...
default: ...
}
8. 3 반복문
반복문(loop statement)은 조건식이 거짓이 될 때 까지 반복한다. for, while, do...while문이 있다.
8. 3. 1 for문
조건식이 거짓이 될 때 까지 반복한다.
for (변수 선언 또는 할당문; 조건식; 증감식) {
...
}
조건식의 세 항목은 필수가 아니며 생략 가능하다. 단, 모두 생략할 경우(;;) 무한루프에 빠지게 된다. 기초적인 내용이므로 이 외의 자세한 설명은 생략한다.
8. 3. 2 while문
마찬가지로 조건이 거짓이 될 때 까지 반복한다. for문은 반복 횟수가 명확할 때, while문은 반복 횟수가 불명확할 때 사용한다.
while (조건식) {
...
}
반복을 탈출하려면 break문을 사용하면 된다. 자세한 내용은 생략한다.
8. 3. 3 do...while문
while문이 조건식, 코드블록 순으로 작성된다면 do...while문은 그 반대이다. 조건식의 평가 결과와 관계없이 적어도 한번은 실행된다는 것이 그 차이다.
do {
...
} while (조건식);
8. 4 break문
break문은 레이블문, 반복문, switch문을 탈출한다. 이 외의 상황에서 사용하면 에러가 발생한다. 여기서 레이블문(label statement)이란 식별자가 붙은 문을 말한다.
foo: console.log('hi');
레이블 문은 프로그램 실행 순서 제어에 사용되며, switch문의 case와 default가 레이블문이다. 레이블문은 중첩 for문에서 외부의 반복문을 탈출하기 위해 사용된다.
foo: for (...){
for (...){
if (...) break foo;
}
}
이 외의 경우에는 사용을 지양하도록 하자. 가독성이 나빠지고 오류가 생길 수 있다.
8. 5 continue문
반복문의 코드 블록에서 사용된다. 현 시점에서 반복을 중단하고 증감식으로 흐름을 이동시킨다. 반복문을 탈출하지는 않는다. 자세한 내용은 생략한다.
'FE > JS' 카테고리의 다른 글
[Modern Javascript Deep Dive] #9 타입 변환과 단축 평가 (0) | 2024.02.06 |
---|---|
[Modern Javascript Deep Dive] #7 연산자 (0) | 2024.02.05 |
[Modern Javascript Deep Dive] #6 데이터 타입 (0) | 2024.02.05 |
[Modern Javascript Deep Dive] #5 표현식과 문 (0) | 2024.02.05 |
[Modern Javascript Deep Dive] #4 변수 (0) | 2024.02.05 |