모던 자바스크립트 Deep Dive / 8장(제어문)

서지영·2021년 11월 30일
0
post-thumbnail

★ 내용 정리

1. 블록문

0개 이상의 문을 중괄호로 묶은 것으로, 코디 블록 또는 블록이라고 부르며, 블록문 끝에는 언제나 세미콜론을 붙이지 않음(자체 종결성)

2. 조건문

주어진 조건식의 평가 결과에 따라 블록문의 실행을 결정하는 것으로, 불리언 값으로 평가될 수 있는 표현식

  • if ... else 문
    : 논리적 참 또는 거직에 따라 실행할 코드 블록을 결정하며, true일 경우 if 문의 코드블록이 실행되고, false일 경우 else 문의 코드블록이 실행됨
    : 조건에 따라 실행될 코드 블록을 늘리고 싶으면 else if 문을 사용함

    if (조건식1) {
    // 조건식1가 true 일 경우, 실행
    } else if (조건식 2) {
    // 조건식2가 true 일 경우, 실행
    } else {
    // 조건식1과 조건식2가 모두 거짓이면, 실행
    }

  • switch 문
    : 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문(상황을 의미하는 표현식을 지정하고 콜론으로 마침) 으로 실행 흐름을 옮김
    : if...else 문과 달리, 불리언 값보다는 문자열이나 숫자 값인 경우가 많음
  • 폴스루(fall through)
    : 문을 실행한 후 switch문을 탈출하지 않고 switch문이 끝날 때까지 이후의 모든 case문과 default문을 실행하는 것
    : 보통은 case문에 해당하는 문의 마지막에 break문을 넣어 switch문을 탈출
    : 폴스루를 이용하여 여러 개의 case문을 하나의 조건으로 사용할 수 있음

3. 반복문

조건식의 평가 결과가 참인 경우 코드 블록을 실행하며, 조건식이 거짓일 때까지 반복됨

(1) for 문
: 조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행하며, for 문 내에 for 문을 중첩해서 사용할 수 있음(중첩 for 문)

for (초기화식; 조건식; 증감식) {
조건식이 참인 경우 반복 실행될 문;
}

  • 무한루프 : 코드 블록이 무한히 반복 실행하는 문

(2) while 문
: 주어진 조건식의 평가 결과가 참이면 코드 불록을 계속해서 반복 실행하며, for 문은 반복 횟수가 명확할 때 주로 사용하고, while 문은 반복 횟수가 불명확할 때 주로 사용함

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

  • 평가 결과가 언제나 참이면 무한루프가 되며, 무한루프에서 탈출하기 위해서는 코드 블록 내에 if 문으로 탈출 조건을 만들고 break 문으로 코드 블록을 탈출함
    var count = 0;
    // 무한루프
    while (true) {
    console.log(count);
    count++;
    // count가 3이면 코드 블록을 탈출
    if (count === 3) break;
    } // 0 1 2

(3) do ... while 문
: 코드 블록을 먼저 실행하고 조건식을 평가하며, 무조건 한 번 이상 실행됨

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

(4) break 문
: 레이블 문, 반복문, switch 문의 코드 블록 외에 break문을 사용하면 SyntaxError(문법 에러)가 발생함

// outer라는 식별자가 붙은 레이블 for 문
outer: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
// i + j === 3이면 외부 for 문을 탈출한다.
if (i + j === 3) break outer;
}
}
console.log('Done!');

  • 레이블 문이란, 식별자가 붙은 문으로서 프로그램의 실행 순서를 제어하는 데 사용함

(5) continue 문
: 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시키며, break 문과 달리 반복문을 탈출하지 않음


★ 실습 예제

1. 두 개의 주사위를 던졌을 때 두 눈의 합이 6이 되는 모든 경우의 수 출력 (이중 중첩 for 문)

for (var i = 1; i <= 6; i++) {
for (var j = 1; j <= 6; j++) {
if (i + j === 6) console.log([${i}, ${j}]); }
}
* 결과값
[1, 5][2, 4][3, 3][4, 2][5, 1]

2. 문자열에서 특정 문자의 인덱스(위치) 검색

var string = 'Hello World.';
var index;
// 문자열은 유사배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string.length; i++) {
// 문자열의 개별 문자가 'l'이면
if (string[i] === 'l') {
index = i;
break; // 반복문을 탈출한다.
}
}
console.log(index); // 2
// 참고로 String.prototype.indexOf 메소드를 사용해도 같은 동작을 한다.
console.log(string.indexOf('l')); // 2

3. 문자열에서 특정 문자의 갯수 세기

var string = 'Hello World.';
var search = 'l';
var count = 0;
// 문자열은 유사배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string.length; i++) {
// 'l'이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
if (string[i] !== 'l') continue;
count++; // continue 문이 실행되면 이 문은 실행되지 않는다.
}
console.log(count); // 3
// 참고로 String.prototype.match 메소드를 사용해도 같은 동작을 한다.
console.log(string.match(/l/g).length); // 3

  • 아래 참고

// 위 예제의 for 문은 다음 코드와 동일하게 동작함
for (var i = 0; i < string.length; i++) {
// 'l'이면 카운트를 증가시킨다.
if (string[i] === 'l') count++;
}

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

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


profile
코딩코딩

0개의 댓글