[JS] 8. 제어문

윤결심·2022년 3월 27일
0

JS

목록 보기
7/14
post-thumbnail

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

일반적으로 코드는 위에서 아래 방향으로 실행되지만 제어문을 이용하면 콛의 실행 흐름을 인위적으로 제어할 수 있음

8.1 블록문

블록문: 0개 이상의 문을 중괄호로 묶은 것. 코드블록 또는 블록이라고 부르기도 함

자바스크립트는 블록문을 하나의 실행 단위로 취급

8.2 조건문

조건문은 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정

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

자바스크립트는 if ... else문과 switch문 두가지 조건문을 제공

  1. if ... else 문

    if (조건식 1) {
    // 조건식 1이 참이면 이 코드 블록이 실행
    } else if (조건식 2) {
    // 조건식 2가 참이면 이 코드 블록이 실행
    } else {
    // 조건식 1과 2가 모두 거짓이면 이 코드 블록이 실행 
    }
    
    // 코드 블록 내의 문이 하나뿐이라면 중괄호 생략 가능

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

var x = 2 ;
var result ;

if (x % 2 ) {
	result = '홀수';
} else {
	result = '짝수';
}

console.log(result);

//

var x = 2 ;
var result = x % 2 ? '홀수':'짝수';

console.log(result);

// 경우의 수 3가지라면 
var kind = num ? (num > 0 ? '양수':'음수') : '영';

console.log(kind)

삼항 조건 연산자는 값으로 평가되는 표현식을 만듦 → 값으로 사용할 수 있기 때문에 변수 할당 가능

if ...else은 표현식이 나닌 문. → 값처럼 사용할 수 없기 때문에 변수 할당 불가능

따라서 조건에 따라 단순히 값을 결정하여 변수에 할당하는 경우에는 삼항 조건 연산자 사용

조건에 따라 실행해야 할 내용이 복잡하여 여러 줄의 문이 필요하면 if ...else 문

  1. switch 문

    switch 문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮김

    case 문은 상황을 의미하는 표현식을 저장하고 콜론으로 마침. 그 뒤에 실행할 문들을 위치.

    switch문의 표현식과 일칠하는 case문이 없다면 실행 순서는 default문으로 이동. default문은 선택 사항

     switch (표현식) {
    	case 표현식1: 
    		switch 문의 표현식과 표현식 1이 일치하면 실행될 문;
    		break; 
    	case 표현식2: 
    		switch 문의 표현식과 표현식 2가 일치하면 실행될 문;
    		break; 
    	default:
    		switch 문의 표현식과 일치하는 case 문이 없을 때 실행될 문;

if ...else 문의 조건식은 불리언 값으로 평가. 논리적 참, 거짓으로 실행할 코드블록을 결정.

switch문의 표현식은 불리언 값 보다는 문자열이나 숫자 값인 경우가 많음. 다양한 상황에 따라 실행할 코드 블록을 결정.

var month == 11;
var monthName;

switch (month) {
	case 1: monthName ='January';
		break;
	case 2: monthName ='January';
		break;
	case 3: monthName ='January';
		break;
	case 4: monthName ='January';
		break;
	case 5: monthName ='January';
		break;
	case 6: monthName ='January';
		break;
	case 7: monthName ='January';
		break;
	case 8: monthName ='January';
		break;
	case 9: monthName ='January';
		break;
	case 10: monthName ='January';
		break;
	case 11: monthName ='January';
		break;
	case 12: monthName ='January';
		break;
	default: monthName = 'Invalid Month';
}

console.log(monthName); // November

case 후에 break를 사용하지 않았다면 case 문이 일치하지 않더라도 실행 흐름이 다음 case 문으로 연이어 이동.

switch 문의 표현식의 평가 결과와 일치하는 case 문으로 실행 흐름이 이동하여 문을 실행한 것은 맞지만 실행한 후 switch 문을 탈출하지 않고 switch문이 끝날 때 까지 이후의 모든 case 문과 default문을 실행 한 경우를 폴스루라고 한다.

// 폴스루가 유용한 경우
// 윤년인지 판단해서 2월의 일수를 계산
var year = 2000;
var month = 2;
var days = 0;

switch (month) {
	case 1: case 3: case 5: case 7: case 8: case 10: case 12:
		days = 31;
		break;
	case 4:case 6:case 9:case 11:
		days = 30;
		break;
	case 2:
		days = (( year % 4 === 0 && year % 100 !== 0 ) || (year % 400 === 0 )) ? 29 : 28;
		break;
	default:
		console.log('Invalid month');
}

console.log(days); // 29

8.3반복문

반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 실행.

그후 저건식을 다시 평가하여 여전히 참인 경우 코드 블록을 다시 실행. 조건식이 거짓일 때까지 반복

  1. for문

    for문은 조건식이 거짓이므로 평가될 때까지 코드 블록으 ㄹ반복 실행

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

    for문의 변수 선언문, 조건식, 증감식은 모두 옵션이므로 반드시 사용할 필요는 없음.

    단 어떤 식도 선언하지 않으면 무한 루프가 됨

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

    for ( ; ; ) { ... }

    for문 내에는 for문을 중첩해 사용할 수 있음

  2. while문

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

    for문은 칸복 횟수가 명확할 떄 주로 사용

    while 문은 반복 횟수가 불명확할 때 주로 사용

    while 문은 조건문의 평가 결과가 거짓이 되면 코드 블록 실행하지 않고 종료.

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

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

    무한루프에서 탈출하려면 코드 블록 내에 if 문으로 탈출 조건 생성 후 break 문으로 코드 블록 탈출

    //무한루프
    while(true) {...}
    
    // 무한 루프 탈출
    var count = 0;
    
    while(true) {
    	console.log(count);
    	count++;
    	if (count === 3 ) break;
    } // 0 1 2

8.4 break 문

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

이 외 코드 블록에 break 사용하면 SyntaxError 발생

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

(switch문의 case, default문도 레이블 문)

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

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')

8.5 continue 문

continue 문은 반복문의 코드블록을 실행을 현 지점에서 중단하고 반복문 증감식으로 실행 흐름을 이동시킴. break 처럼 반복문을 탈출하지 않음

if 문 내에서 실행해야 할 코드가 한줄이라면 if 사용.

if 문 내에서 실행해야 할 코드가 길다면 들여쓰기가 한 단계 더 깊어지므로 continue 을 사용하는게 가독성이 좋음

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) countinue;

	count++; // continue 문이 실행되면 이 문은 실행되지 않음
}

0개의 댓글

관련 채용 정보