모던 자바스크립트 Deep Dive

[TIL/모던 자바스크립트 Deep Dive] 2023/03/30

8장. 제어문(control flow statement) 코드는 일반적으로 , 즉 위에서 아래 방향으로 순차적으로 실행된다. 이러한 일반적인 코드의 실행 흐름을 인위적으로 제어하기 위해 을 사용하게 된다. 에 따라 등으로 활용된다. 코드의 실행 순서에 인위적으로

2023년 3월 30일2min read

8장. 제어문(control flow statement)

코드는 일반적으로 ``Top-Bottom`, 즉 위에서 아래 방향으로 순차적으로 실행된다. 이러한 일반적인 코드의 실행 흐름을 인위적으로 제어하기 위해 `제어문`을 사용하게 된다. `제어(control)의 방식`에 따라 `조건문, 반복문` 등으로 활용된다. 코드의 실행 순서에 인위적으로 변형을 가하는 것은 필연적으로 코드의 `가독성 저하`로 이어지게 된다. 향후에 학습할 forEach, map, filter, reduce 등의 `고차 함수를 사용한 프로그래밍 기법``에서는 제어문의 사용을 억제하여 복잡성을 해결하려고 노력한다고 한다.

8-1. 블록문(block statement/compound statement)

블록문(block statement/compound statement)```은 0개 이상의 문을 ```중괄호```로 묶은 것을 말한다. 자바스크립트는 블록문을 ```하나의 실행 단위```로 취급한다.

![](https://velog.velcdn.com/images/minkwan/post/9350dd23-36f7-4431-a5dc-9a42f7a88166/image.png)

문의 끝에는 세미콜론(;)을 붙이는 것이 일반적이지만, 블록문은 언제나 문의 종료를 의미하는 ```자체 종결성```을 갖기 때문에 블록문의 끝에는 세미콜론을 붙이지 않는다.

### 8-2. 조건문(conditional statement)

if...else 문

조건식을 평가했을 때, 그 결과가 ``true`이면 `if 문의 코드 블록이 실행`되고, `false`이면 `else 문의 코드 블록이 실행`된다. 조건식은 불리언 값으로 평가되어야 하는데, 만일 if 문의 조건식이 `불리언 값이 아닌 값`으로 평가되면 자바스크립트 엔진에 의해 `암묵적으로 불리언 값으로 강제 변환``된다고 한다. 암묵적 타입 변환에 대해서는 차후에 깊게 배우도록 하겠다.

조건에 따라 실행될 코드 블록```을 늘리고 싶을 때에는 ```else if 문```을 사용한다. else if 문이나 else문은 선택 사항이다. 추가적으로 if 문과 else문은 두 번 이상 사용할 수 없지만, else if 문은 여러 번 사용할 수 있다는 특징이 있다. 관련된 내용에 대한 실습이 아래의 코드이다.

![](https://velog.velcdn.com/images/minkwan/post/f288fa96-f576-4b4b-9de1-1c7e29c71834/image.png)

코드 블록 내의 문(=최소 실행 단위)이 하나뿐이라면 중괄호의 생략이 가능하다. 다음은 중괄호가 생략된 모습이다.

![](https://velog.velcdn.com/images/minkwan/post/66cd8202-3455-46e3-96ae-1e2d56a1b4ae/image.png)

대부분의 if...else 문은 삼항 조건 연산자로 바꿔 쓸 수 있다.

![](https://velog.velcdn.com/images/minkwan/post/1e2be0fa-ceb1-4bf7-8025-1eb710225196/image.png)

'x%2'의 결과는 불리언 값이 아닌 0이다. 암묵적 타입 변환에 의해 0은 false로 변환되고, 따라서 짝수가 반환된다. 경우의 수가 세 가지라면 다음 코드처럼 쓸 수 있다.

![](https://velog.velcdn.com/images/minkwan/post/f2146baf-d9de-4af3-aaa2-1b39205e0506/image.png)


위의 코드를 해석하는 방식은 다음과 같다. 우선 num은 2이기 때문에 true로 변환되고, 괄호('()')와 '영' 중에 괄호('()') 부분을 고려하게 된다. 그 다음 'num>0'이라는 조건식에서도 true이기 때문에 '양수'와 '음수' 중 최종적으로 '양수'를 반환하게 된다.


> **switch 문**

November를 의도하고 작성한 코드인데 'Invalid month'가 출력되었다. 조건에 맞을 때 break를 걸어주지 않으면 switch 문이 끝날 때까지 이후의 모든 case 문과 default 문을 실행하게 된다. 이러한 현상을 ``fall through``라고 한다.

break 문은 코드 블록에서 탈출하는 역할을 한다. break 문이 없다면 case 문의 표현식과 일치하지 않더라도 실행 흐름이 다음 case 문으로 연이어 이동한다.

default 문은 switch 문의 가장 마지막에 위치한다. default 문 실행의 종료는 곧 switch 문 실행의 종료를 의미하기에 별도로 break 문을 작성할 필요가 없다. 그래서 일반적으로 default 문에는 break 문을 생략한다.