08장 제어문

이로그·2023년 10월 31일
0

08장 제어문

  • 제어문 : 조건에 따라 코드 블록을 실행하거나 반복실행 할 때 사용

8.1 블록문

  • 블록문 : 0개 이상의 문을 중괄호로 묶은 것.
  • 자바스크립트는 블록문을 하나의 실행 단위로 취급
  • 단독으로 사용 가능하지만, 일반적으로 제어문이나 함수를 정의할 때 사용하는 것이 일반적
  • 블록문의 끝에는 세미콜론을 붙이지 않음.

8.2 조건문

  • 조건문 : 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정함.
  • 조건식 : 불리언 값으로 평가될 수 있는 표현식

8.2.1 if...else 문

if (조건식) {
    // 조건식이 true면 실행
} else {
    // 조건식이 false면 실행
}
  • 조건식은 불리언값으로 평가되어야 하며, 불리언 값이 아닐 경우 암묵적인 타입 변환으로 강제 변환되어 평가된다.
  • 조건식을 추가하고 싶을 때엔 else if ()를 추가 해주면 된다.
if (조건식1) {
    // 조건식1이 true면 실행
} else if (조건식2) {
    // 조건식2가 true면 실행
} else {
    // 조건식1, 조건식2가 모두 거짓이면 실행
}
  • else와 else if는 옵션이고, else if는 여러번 사용 가능하다.
  • 대부분의 if...else는 삼항 조건 연산자로 바꿔 쓸 수 있다.
var x = 2;
var result;
if (x % 2) {
    result = '홀수';
} else {
    result = '짝수';
}
console.log(result); // 짝수

var result2 = (x % 2) ? '홀수' : '짝수';
console.log(result2); // 짝수
  • if... else if ... else 도 삼항 조건 연산자로 바꿔 쓸 수 있지만, 가독성에 좋지 않다.
var num = 2;
var kind = num ? (num > 0 ? '양수' : '음수') : '영';
console.log(kind); // 양수

8.2.2 switch문

  • switch문 : 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 흐름을 옮김.
  • switch문의 표현식은 불리언 값보다는 문자열이나 숫자 값 인 경우가 많음.
  • 각 case를 적어주고, break를 적어줘야 폴스루(switch를 탈출하지 않고 그 아래의 값까지 다 가져오는 것)를 막을 수 있다.
  • default는 옵션인데, 가장 마지막에 적어줘야 한다.
var value = 'apple';
switch(value) { // 표현식
    case 'apple': //표현식1
        //switch문의 표현식과 표현식1이 일치하면 실행
        break;
    case 'banana': //표현식2
        //switch문의 표현식과 표현식2가 일치하면 실행
        break;
    default:
        //switch문의 표현식과 일치하는 case문이 없을때 실행
}
  • switch문은 사용이 복작하기 때문에, if...else를 사용하는 것을 권장한다. if...else문보다 switch의 가독성이 더 좋을 때에만 사용하는 것이 좋다.

8.3 반복문

  • 반복문 : 조건식의 평가 결과가 참인 경우 코드 블록을 실행하고, 조건식이 거짓일때까지 반복한다.

8.3.1 for문

for(변수 선언문 또는 할당문; 조건식; 증감식) {
    //조건식이 참인 경우 반복 실행될 문
}

for(var i = 0; i < 2; i++) {
    console.log(i); // 0 1
}
  • for문에 변수 선언문, 조건식, 증감식은 모두 옵션이다. 단, 어떤 식도 선언하지 않으면 무한루프에 빠지게 된다.
for( ; ; ) {}
  • for문과 for문은 중첩해 사용할 수 있다.
for(var i = 0; i <= 3; i++) {
    for(var j = 0; j <= 2; j++) {
        console.log(`[${i}, ${j}]`);
    }
}

8.3.2 while문

  • while문 : 주어진 조건식의 평가 결과가 참이면, 블록을 계속해서 반복 실행함.
  • for문은 반복횟수가 명확할 때 사용, while문은 반복 횟수가 불명확할 때 주로 사용
  • 평가 결과가 거짓일때 반복문이 종료된다.
var count = 0;
while (count < 3) {
    console.log(count); // 0 1 2
    count++;
}
  • 조건식을 true로 하면 무한루프를 만들 수 있는데, break를 이용하면 무한루프를 탈출 할 수 있다.
var count = 0;
while (true) {
    console.log(count); // 0 1 2
    count++;

    if(count === 3) break;
}

8.3.3 do...while문

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

do {
    console.log(count); // 0 1 2
    count++;
} while (count < 3);

8.4 break문

  • break문 : 레이블문, 반복문, switch문의 코드 블록을 탈출한다.
  • 이 외에 코드 블록에서 사용하면 SyntaxError(문법에러)가 발생한다
if (true) {
    break; // SyntaxError
}
  • 레이블 문 : 프로그램의 실행 순서를 제어하는데 사용한다. 중첩된 for문 외부로 탈출할 때에는 유용하지만, 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 권장하지 않는다. switch의 case문과 default문도 레이블 문에 속한다
  • 중첩된 for문의 내부 for 문에서 break 문을 실행하면, 내부 for문을 탈출하여 외부 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}]`);
    }
}
  • break문은 반복문을 더 이상 진행하지 않아도 될 때 불필요한 반복을 회피할 수 있어 유용하다
var string = 'Hello World.';
var search = 'l';
var index;

for (var i = 0; i < string.length; i++) {
    if(string[i] === search) {
        index = i;
        break; // 반복문을 탈출한다
    }
}

console.log(index); // 2

8.5 continue문

  • continue문 : 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다. break문처럼 반복문을 탈출하지는 않는다.
var string = 'Hello World.';
var search = 'l';
var count = 0;

for(var i = 0; i < string.length; i++) {
    if(string[i] === search) continue;
    count++; // continue 문이 실행되면 이 문은 실행되지 않는다.
}

console.log(count); // 3

0개의 댓글