[JavaScript] 모던 자바스크립트 Deep Dive로 배우는 JS #8 제어문(2)

ChilihC·2022년 8월 30일
0
post-thumbnail

TIL(Today I Learned) 🧑🏻‍💻


8. 제어문(2)


  • 제어문(control flow statement)는 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.

  • 제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다.

  • 코드의 실행 순서가 변경된다는 것은 단순히 위에서 아래로 순차적으로 진행하는 직관적인 코드의 흐름을 혼란스럽게 만든다.

  • 제어문은 코드의 흐름을 이해하기 어렵게 만들어 가독성을 해치는 단점이 있다.

  • forEach, map, filter, reduce 같은 고차 함수를 사용한 함수형 프로그래밍 기법에서는 제어문의 사용을 억제하여 복잡성을 해결하려고 노력한다.

8.3  반복문

  • 반복문(loop statement)은 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다. 그 후 조건식을 다시 평가하여 여전히 참인 경우 코드 블록을 다시 실행한다. 이는 조건식이 거짓일 때까지 반복된다.

  • 자바스크립트는 세 가지 반복문 for 문, while 문, do... while 문을 제공한다.


8.3.1  for 문

  • for 문은 조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행한다. 가장 일반적으로 사용되는 for 문의 형태는 다음과 같다.
for (변수 선언문 또는 할당문; 조건식; 증감식) {
  // 조건식이 참인 경우 반복 실행될 문; 
} 
  • for 문의 변수 선언문의 변수 이름은 반복을 의미하는 iteration의 i를 사용하는 것이 일반적이다.

  • for 문의 변수 선언문, 조건식, 증감식은 모두 옵션이므로 반드시 사용할 필요는 없다. 단, 어떤 식도 선언하지 않으면 무한루프가 된다.

// 무한루프
for (;;) { ... } 
  • for 문 내에 for 문을 중첩해 사용할 수 있으며, 이를 중첩 for 문이라 부른다.

8.3.2  while 문

  • while 문은 주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행한다.

  • for 문은 반복 횟수가 명확할 때 주로 사용하고 while 문은 반복 횟수가 불명확할 때 주로 사용한다.

var count = 0;

// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
while (count < 3) {
  console.log(count); // 0 1 2
  count++;
}
// 무한루프
while (true) { ... }

8.3.3  do ... while 문

  • do ... while 문은 코드 블록을 먼저 실행하고 조건식을 평가한다. 따라서 코드 블록은 무조건 한 번 이상 실행된다.
var count = 0;

// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
do {
  console.log(count); // 0 1 2 
  count++;
} while (count < 3);

8.4  break 문

  • break 문 사용 시 레이블문, 반복문(for, for ... in, for ... of, while, do ... while) 또는 switch 문의 코드 블록을 탈출한다.

  • 레이블 문(label statement)란 식별자가 붙은 문을 말한다.

  • 레이블 문은 프로그램의 실행 순서를 제어하는 데 사용한다. (사실 switch 문의 case 문과 default 문도 레이블 문이다.)

  • 레이블 문을 탈출하려면 break 문에 레이블 식별자를 지정한다.

// 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이면 outer라는 식별자가 붙은 레이블 for 문을 탈출한다.
    if(i + j === 3) break outer;
    console.log(`inner [${i}, ${j}]`);
  }
}

console.log('Done!');
  • 레이블 문은 중첩된 for 문 외부로 탈출할 때 유용하지만 그 밖의 경우에는 일반적으로 권장하지 않는다.

  • 레이블 문을 사용하면 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문이다.


8.5  continue 문

  • continue 문은 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.

  • continue 문을 사용함으로써 들여쓰기 deapth를 줄일 수 있다.

var string = 'Hello World.';
var search = 'l';
var count = 0;

// continue 문을 사용하지 않으면 if 문 내에 코드를 작성해야 한다.
for(var i = 0; i < string.length; i++) {
  // 'l'이면 카운트를 증가시킨다.
  if(string[i] === search) {
    count++;
    // code
    // code
    // code
  }
}

// continue 문을 사용하면 if 문 밖에 코드를 작성할 수 있다.
for(var i = 0; i < string.length; i++) {
  // 'l'이면 카운트를 증가시킨다.
  if(string[i] !== search) continue;
  
  count++;
  // code
  // code
  // code 
}

새로운 용어 정리



참고 문헌


* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음

profile
developer junior

0개의 댓글