8장 제어문
- 제어문은 조건에 따라 코드 블록을 실행(조건문) 하거나, 반복 실행(반복문)할 때 사용된다. 일반적으로, 위에서 아래방향으로 실행되며, 제어문을 통해 흐름을 제어할수 있다.
8-1. 블록문
- 블록문은 0개 이상의 문을 중괄호로 묶은 것으로, 코드 블록 또는 블록이라고 부른다.
- 블록문은 언제나 문의 종료를 의미하는 자체 종결성을 가지고 있어, 세미콜론을 붙이지 않는다는 것을 주의해야 한다.
//블록문
{
var foo = 10;
}
//제어문
var x = 1;
if(x<10){
x++;
}
//함수 선언문
function sum(a,b){
return a+ b;
}
8-2. 조건문
- 조건문은 주어진 조건식의 평과 결과에 따라 코드 블록의 실행을 결정한다.
- javascript는 2가지 조건문을 제공한다
8-2-1. if else문
if(조건식){
//조건 식이 참이면 실행
} else{
//조건식이 거짓이면 이 코드 블록을 실행
}
조건식을 추가하기 위해선 else if문을 추가하여 조건을 추가하여 실행이 가능하다.
또한 삼항 조건 연산자로 바꿔 사용이 가능하다.
- if else 문은 값처럼 사용할수 없기 때문에 변수에 할당할 수 없다. 따라서 표현식이 아닌 문이 된다.
8-2-2. switch문
switch문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 흐름을 옮긴다, case문이 없다면 default문으로 이동하며, default문은 선택 사항이다.
switch(표현식){ case 표현식1: switch문의 표현식과 표현식1이 일치하면 실행될 문; break; case 표현식2: switch문의 표현식과 표현식2가 일치하면 실행될 문; break; default: switch문과 일치하는 case문이 없을때 실행될 문; }
이처럼 break문을통해 break를 탈출하지 않으면 모든 일치하는 case문 이외의 모든 문들이 switch문이 끝날때 까지 실행되며 이를 풀스루(fall through)라고 한다.
//월을 영어로 변환 한다.
var month = 10; (10 -> October);
var monthName;
switch(month){
case 9: monthName = 'September';
case 10: monthName = 'October';
case 11: monthName = 'November';
case 12: monthName = 'December';
default: monthName = 'Invalid month';
}
console.log(monthName); //Invalid month 출력
- 이처럼 monthName변수에 case 10의 값인 October부터 계속 November, December, Invalid month의 값들이 재할당 된다. 덮어 씌어지는것 이기 때문에, 마지막의 값인 Invalid month가 출력된다.
8-3. 반복문
- 반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 실행하며, 그 후에도 조건식을 재평가하여 거짓이 나올때 까지 계속 반복한다.
8-3-1. for문
- for 문의 경우 조건식이 거짓일때 까지 코드 블록을 반복 실행하며, 가장 일반적으로 사용되는 형태이다.
for(변수 선언문 or 할당문; 조건식; 증감식;){
조건식이 참인 경우 반복 실행될 문;
}
( 실행과정 )
for(var i = 0; i < 2; i++){
console.log(i);
}
1.for 문을 실행하여 변수 선언문 var i = 0;이 실행되고, 변수 선언문은 단 한번만 실행된다.
2.변수 선언문의 실행이 종료되면, 조건식이 실행된다. 현재 i변수의 값은 0이므로 조건식의 평가 결과는 true이다.
3.조건식이 true이므로, 코드 블록이 실행되고 코드 블록으로 실행흐름이 넘어간다.
4.코드 블록의 실행이 종료되면 증감식 i++가 실행되어 변수 i 의 값은 1이 된다.
5.증감식 실행이 종료되면 다시 조건식이 실행된다. 현재 변수 i의 값은 1이므로 true값이 반환된다.
6.조건식이 true이므로, 코드 블록이 실행되고 코드 블록으로 실행흐름이 넘어간다.
7.코드 블록의 실행이 종료되면 증감식 i++가 실행되어 변수 i 의 값은 2이 된다.
8.증감식 실행이 종료되면 다시 조건식이 실행된다. 현재 변수 i의 값은 2이므로 false값이 반환된다. 조건식의 평과 결과가 false이므로, for문의 실행은 종료된다.
- 또한 for문의 경우 어떤 식도 선언하지 않으면 for(;;) 무한 루프 되며, 무한히 반복되며, for문 내에 for문을 넣어 중첩하여 사용할 수 있다.
8-3-2. while문
while 문은 주어진 조건식의 평가 결과가 참이면 코드블록을 계속해서 반복 실행하는데, for문과의 차이는, for문의 경우 반복횟수가 명확할 때 주로 사용하고, while문은 반복 횟수가 불명확할 때 주로 사용한다.
while 문의 경우 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 강제 변환하여 논리적으로 참, 거짓을 구별한다.
var count = 0;
//count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
while(count<3){
console.log(count); // 0 1 2
count++;
}
- while문 역시 조건식의 평가 결과가 언제나 참이면 무한 루프가 가능하다. 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 문은 코드 블록을 탈출하는 것, 즉 레이블 문, 반복문 또는 switch 문의 코드 블록을 탈출 하는 것이다. (그 이외에서 break문을 사용시, SyntaxError가 발생한다.)
( 레이블 문 )
- 레이블 문 label statement 이란 식별자가 붙은 문을 말한다. 실행 순서를 제어하는 데 사용하고, switch 문의 case문, default문 도 레이블 문이다. 이때 레이블 문을 탈출하기 위해 break문을 사용한다.
// foo라는 식별자가 붙은 레이블 블록문.
foo: {
console.log(1);
break foo; //foo 레이블 블록문을 탈출한다.
console.log(2);
}
console.log('Done!');
//switch, for문 등 반복문에서 break문 사용시, 특정한 식별자를 지정하지 않고 바로 break;로 사용한다.
8-5. continue문
continue 문은 반복문의 코드 블록 실행을 현 지점에서 중단하고, 반복문의 증감식으로 실행 흐름을 이동 시키며, break문 처럼 반복문을 탈출하지는 않는다.
continue 문을 사용할 경우 간편하고 가독성이 좋아진다.
//continue 문을 사용하지 않으면 if 문 내에 코드를 작성해야 한다.
for(var i = 0; i < string.length; i++){
//'l'이면 카운트를 증가시킨다
if(string[i] === search){
count++;
//code
}
}
//continue 문을 사용 하면 if 문 밖에 코드를 작성할 수 있다.
for(var i =0; i < string.length; i++){
//'l'이 아니면 카운트를 증가시키지 않는다.
if(string[i] !== search)continue;
count++;
//code
}
'JAVA Script > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
[ 10장 ] 객체 리터럴 (0) | 2022.05.09 |
---|---|
[ 9장 ] 타입 변환과 단축 평가 (0) | 2022.05.03 |
[ 7장 ] 연산자 (0) | 2022.05.02 |
[ 6장 ] 데이터 타입 (0) | 2022.04.12 |
[ 5장 ] 표현식과 문 (0) | 2022.04.12 |
댓글