TIL

190508_TIL(제어문)

제어문

  • 제어문(Control flow statement)은 주어진 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.
  • 일반적으로 코드는 위에서 아래 방향으로 순차적으로 실행된다. 제어문은 코드의 실행 순서를 인위적으로 제어할 수 있다.

1. 블록문

블록문(Block statement/Compound statement)는 0개 이상의 문을 중괄호롤 묶은 것으로 코드 블록 또는 블록이라고 부르기도 한다. 자바스크립트는 블록문을 하나의 실행 단위로 취급한다.

2. 조건문

조건문(conditional statement)은 주어진 조건식(conditional expression)의 평가 결과에 따라 코드 블럭(블록문)의 실행을 결정한다.

조건식은 불리언 값으로 평가될 수 있는 표현식이다.

자바스크립트는 2가지의 조건문 if…else 문과 switch 문을 제공한다.

2.1. if…else 문

만약 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 강제 변환되어 논리적 참, 거짓을 구별한다.

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

1
2
3
4
5
6
7
var num = 2;

// 0은 false로 취급된다.

var kind = num ? (num > 0 ? '양수' : '음수'): '영';

console.log(kind);

num > 0 ? '양수' : '음수'는 표현식이므로 다른 표현식의 일부가 될 수 있다.

삼항 조건 연산자 표현식은 값처럼 사용할 수 있으나 if…else 문은 값처럼 사용할 수 없다는 차이가 있다.

2.2. switch 문

switch문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 순서를 이동시킨다.

switch 문의 표현식은 불리언 값보다는 문자열, 숫자 값인 경우가 많다.

switch 문은 논리적 참, 거짓보다는 다양한 상황(case)에 따라 실행할 코드 블록을 결정할 때 사용한다.

break 문을 사용하지 않아 switch 문을 탈출하지 않고 연이어 case문과 default문을 실행하는 것을 폴스루(fall through)라 한다.

break 키워드로 구성된 break 문은 코드 블록에서 탈출하는 역할을 한다.

break 문을 생략한 폴스루(fall through)가 유용한 경우도 있다.

  • 윤년인 판별해서 2월의 일수를 계산하는 예제

3. 반복문

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

3.1. for문

for문은 조건식이 거짓으로 판별될 때까지 코드 블록을 반복 실행한다.

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

for문의 실행

  • 변수 선언문은 단, 한번만 실행된다.
  • 조건식의 평가 결과가 true이면 코드 블록을 실행하고, false이면 for문의 실행이 종료된다.

3.2. while문

while 문은 주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행한다. 조건문의 평가 결과가 거짓이 되면 실행을 종료한다. 만약 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 강제 변환되어 논리적 참, 거짓을 구별한다

조건식의 평가 결과가 언제나 참이면 무한루프가 된다.

3.3. do…while문

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

4. break문

레이블 문, 반복문(for, for…in, for…of, while, do…while) 또는 switch 문의 코드 블록을 탈출한다

중첩된 for문의 내부 for문에서 break 문을 실행하면 내부 for문을 탈출하여 외부 for문으로 진입한다. 내부 for문이 아닌 외부 for문을 탈출하려면 레이블문을 사용한다.

※ 레이블 문

  • 반복문에 레이블을 붙이고, break나 continue 구문을 사용해 반복문의 어느 위치에서 작업을 멈추고 어느 위치에서 다시 수행할지를 알려줄 수 있다.
  • 레이블문은 프로그램의 실행 순서를 제어하기 위해 사용한다.
  • switch문의 case문과 default 문도 레이블 문이다.
  • break는 모든 레이블 구문에서 사용될 수 있으며, continue는 반복 레이블 구문에서만 사용할 수 있다.
  • 중첩된 for문을 외부로 탈출할 때 유용하지만 그 외의 경우 레이블 문은 일반적으로 권장하지 않는다.(가독성이 나빠지고 오류 발생 가능성이 높아진다.)
1
2
3
4
5
6
7
8
9
10
11
12
var i, j;

loop1:
for (i = 0; i < 3; i++) { //첫번째 for문은 "loop1" 레이블
loop2:
for (j = 0; j < 3; j++) { //두번째 for문은 "loop2" 레이블
if (i === 1 && j === 1) {
continue loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}

5. contionue문

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

1
2
3
4
5
6
7
// continue 문을 사용하면 if 문 밖에 코드를 작성할 수 있다.
for (var i= 0; i < string.length; i++) {

if (string[i] !== search) continue;

count++;
}

참고자료

Share