본문 바로가기
FE/JS

[Modern Javascript Deep Dive] #8 제어문

by aeyong-dev 2024. 2. 5.

 제어문(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문

 반복문의 코드 블록에서 사용된다. 현 시점에서 반복을 중단하고 증감식으로 흐름을 이동시킨다. 반복문을 탈출하지는 않는다. 자세한 내용은 생략한다.