제어문 control flow statement 은 조건에 따라 코드 블록을 실행하거나 반복할 때 사용한다. 코드는 일반적으로는 순차적으로 실행되지만, 제어문을 사용하면 코드 흐름을 인위적으로 바꿀 수 있게 된다.
조건문 conditional statement 은 주어진 조건식의 평가 결과에 따라 실행할 코드를 결정한다. 다음과 같은 두 가지 조건문이 있다.
if...else
switch
if...else
문은 주어진 조건식의 평가 결과(논리적 참, 거짓)에 따라 실행할 코드 블록을 결정한다.
if (조건식) {
// 조건이 참일 때
} else {
// 조건이 거짓일 때
}
👉 if
문의 조건식은 Boolean 값으로 평가되어야하며, 조건식을 더 늘리고 싶다면 else if
를 사용하면 된다. 또한 else
와 else if
는 옵션이기에 사용할 필요가 없다면 사용하지 않아도 된다.
switch
문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case
문으로 실행 흐름을 옮긴다. 만약, 표현식과 일치하는 case
문이 없다면, default
문으로 이동하면 되고, default
도 옵션이라 사용하지 않아도 된다. 하지만 언제든 예외가 발생하기 마련이니 사용하는 것이 좋아보인다.
switch(표현식) {
case 표현식1:
// 표현식과 표현식1이 만족하면 실행된다.
break;
case 표현식2:
// 표현식과 표현식2가 만족하면 실행된다.
break;
default:
}
👉 switch
문을 사용할 때 주의할 점은 break
이다. break
를 적절히 사용하지 않으면, 표현식과 일치하지 않아도 실행 흐름이 다음 flow. 즉, 다음의 case
로 넘어가기 때문이다.
반복문 loop statement 은 조건식의 평가 결과가 참인 경우 코드를 실행한다. 그 후 조건식을 계속해서 평가하며, 조건식이 거짓일 때까지 반복 실행된다. JS는 세 가지 반복문을 제공한다.
for
while
do...while
for
문은 조건식이 거짓으로 평가될 때까지 코드를 반복 실행한다.
for (변수 선언문 또는 할당문; 조건식; 증감식) {
조건식이 참일 경우 반복 실행될 문
}
👉 for
문은 중첩해서 사용 가능하다. 하지만, 알고리즘을 생각 했을 때, 중첩 할수록 수행 시간도 늘어나기에 반복 중첩을 하기 전에 효율을 따져보자.
while
문 또한 주어진 조건식의 평가가 참일 때 코드를 반복해서 실행하게 되는데, for
문은 반복 횟수가 확실하게 정해졌을 때 주로 사용하고, while
문은 반복 횟수가 불명확할 때 사용한다.
// 무한 루프
while (true) { ... }
👉 주로 while
문 안에 조건문을 넣어 특정 조건이 충족 되었을 때, break
를 사용하여 종료하는 방식으로 사용한다.
do...while
문은 코드를 먼저 한 번 이상 실행한 다음에 조건을 평가한다.
var count = 0;
do {
console.log(count);
count++;
} while (count < 3);
switch
문과 while
문에서 봤듯, 반복되어 실행되는 코드 블럭을 탈출한다.
단, 레이블문, 반복문, switch 외에 사용하면 SyntaxError
가 발생한다.
👉 레이블 문 Label Statement란?
식별자가 붙은 statement를 뜻한다.foo: console.log('foo'); // foo라는 레이블 식별자가 붙음.
outer: for(var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i + j === 3) break outer;
console.log(`inner[${i}, ${j}]`);
}
}
console.log('Done!');
위의 코드와 같이 레이블 문은 중첩된 for
문 외부로 탈출할 때 유용하지만 그 밖의 경우에는 일반적으로 권장하지 않는다. 이는 코드의 흐름이 복잡해지고, 가독성 또한 나빠진다. 결국 내가 원치 않는 결과값이나 오류를 뿜어낼 가능성이 높다.
break
문은 반복문을 더 이상 진행하지 않아도 될 때 사용하도록 하자.
continue
는 반복문의 코드 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동한다. 이 문을 만나면 코드를 현 시점에서 중단하는건 break
와 같지만 다른 점은 반복문을 탈출하지 않는다는 것이다.