제어문은 조건에 따라 코드블록을 실행하거나 반복 할 때 사용한다.
일반적으로 코드의 실행은 위에서 아래 방향으로 순차적으로 실행되지만
제어문을 이용하면 실행 흐름을 인위적으로 제어 할 수 있다.
블록문은 0개 이상의 문을 중괄호로 묶은 것으로 코드블록 또는 블록이라고 부르기도 한다.
자바스크립트는 블록문을 하나의 실행 단위로 취급하며 일반적으로 제어문이나 함수를 젖ㅇ의 할 때 사용하는 것이 일반적이다.
// 블록문
{
var foo = 10;
}
// 제어문
var x = 1
if (x < 10) {
x ++
}
// 함수 선언문
function sum(a,b){
return a+b;
}
다음처럼 블록문은 혼자서도 쓰일 수 있고 , 제어문이나 함수 선언문 등에서 코드블록 형태로 사용 할 수 있다.
조건문은 주어진 조건식의 평과 결과에 따라 코드 블록의 실행을 결정한다 .
if (조건식){
true 일 때 실행 할 코드
} else {
false 일 때 실행 할 코드
}
다음처럼 사용 가능하다.
조건문이 3개 이상일 때는 if , else if , else
로 사용 가능하다.
switch (expression) {
case value1:
// value1에 해당하는 코드 실행
break;
case value2:
// value2에 해당하는 코드 실행
break;
// 추가적인 case들...
default:
// 어떤 경우에도 해당하지 않을 때 실행되는 코드
}
다음처럼 expression
에 들어가있는 값이 무수하게 많은 case 중 하나에 해당된다면 그 밑에 있는 코드를 실행하고 break
를 통해 switch
문을 빠져나갈 수 있다.
스위치문은 무수하게 많이 나열된 if else if ..
문과 같은 역할을 하지만
스위치문은 불리언 값이 아닌 값을 case 로 넣는 것이 가능하다.
let fruit = 'apple';
switch (fruit) {
case 'banana':
console.log('This is a banana.');
break;
case 'apple':
console.log('This is an apple.');
break;
case 'orange':
console.log('This is an orange.');
break;
default:
console.log('Unknown fruit.');
}
fruit 의 값이 어떤거면 ~ 저런 문구를 실행해 이렇게 말이다.
그런데 잘 안쓴다고 한다.
내 생각에도 차라리 딕셔너리 형태로 저장해두고 시키는게 오천배 나을듯
반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 시행한다.
대표적인 반복문은 3개로 for , while , do while
문이 존재한다.
세 개 말고도 더 많다고 하는데 그것은 다음 챕터들에 나올 내용이니 일단 넘어가자고 한다.
for (반복문에 쓰일 변수 선언문 ; 조건식 ; 증감식){
조건식이 true 일 때 실행할 코드
}
이런식으로 사용 가능하다.
for (let i = 1; i < 10; i++) {
if (i % 2) {
console.log(i, '홀수 입니다');
} else {
console.log(i, '짝수 입니다.');
}
}
슈류륙
let i = 1;
while (i < 10) {
if (i % 2) {
console.log(i, '홀수입니다');
} else {
console.log(i, '짝수입니다');
}
i++;
}
얘도 이렇게 사용하거나 중간에 break
문을 이용해서 탈출 할 수도 있다.
신기하다 별게 다있네
do .. while 문은 코드 블록을 먼저 실행하고 조건식을 평가한다.
let i = 1;
do {
console.log(i);
i++;
} while (i < 5);
while 문 안에 들어갈 내용을 빼서 do
안으로 빼주자
그러면 while
문이 실행되지 않더라도 do
내부에 있는 코드가 우선적으로 실행된다.
break 문은 코드 블록을 탈출한다. 엄밀히 말하면 반복문이나 레이블 문을 탈출한다.
레이블문 ?
레이블문은 식별자가 붙은 문을 말한다.
hi: { console.log(1); break hi; console.log(2); }
라는 코드가 있다면 해당 코드 블록을
hi
라는 식별자로 이름을 붙어둔 것이다.
코드블록 내부의hi
를break
하라는 제어문을 통해 해당 코드 블록에서 벗어난다.
doubleFor: for (let i = 1; i < 7; i++) {
for (let j = 1; j < 7; j++) {
if (i + j > 4) {
console.log(i, j);
}
}
}
만약 두 주사위 눈의 합이 5 이상인 것을 출력하는 코드가 있을 때
하나라도 5 이상인 것을 발견하면 이중 반복문을 멈추고 싶다고 해보자
그러면 그냥 저 이중 반복문의 코드 블록이 doubleFor
라는 식별자로 선언 되어 있기 때문에
doubleFor: for (let i = 1; i < 7; i++) {
for (let j = 1; j < 7; j++) {
if (i + j > 4) {
console.log(i, j);
break doubleFor;
}
}
}
이중반복문 전체를 break
해달라고 하면 된다.
만약 일반적인 break
만 썼다면 두 번째 반복문에서만 빠져 나올 수 있다.
레이블문 굿
continue 문은 break 문과 비슷하다.
하지만 continue 문은 코드 블록을 탈출 하는 것이 아니라 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동한다.