제어문이란?
제어문(Control Flow Statement)은 자신이 원하는 조건에 따라서
특정 코드를 실행하거나 반복할 때 사용합니다.
순차적으로 코드가 실행되는 일반적인 상황과 다르게
코드 실행 흐름(Flow)이 뒤죽박죽이 되기 때문에
코드를 복잡하게 만들 위험이 커지기 때문에
필시 숙달하여 조심히 사용해야 합니다.
블록문
블록문은 문을 중괄호{}로 묶은 것을 말합니다.
자바스크립트는 단독으로 사용할 수도 있지만
보통 제어문이나 반복문, 함수를 정의할 때 주로 사용합니다.
cf) 문(statement)이란 표현식(expression)의 상위집합입니다.
명령문이라고도 불리며
코드의 가장 기본적인 실행 단위입니다.
예시)
function foo(a, b){
Return a + b;
}
조건문
조건문은 조건식의 결과에 따라 블록문을 실행할지 말지를 결정하는 문입니다.
자바스크립트에는 2가지 조건문이 있는데,
If-else 문과 switch문입니다.
if - else 문
기본 형식은 다음과 같습니다.
if(조건식) {
//if 조건식이 맞으면 이 블록문이 실행됩니다.
}
else if (조건식2) {
//if 조건식이 틀리고, 조건식2가 맞으면 이 블록문이 실행됩니다.
}
…
else {
//if 조건식이 거짓일 경우 이 블록문이 실행됩니다.
}
else if 문은 몇 개를 써도 상관없습니다.
이때 else if와 else 문은 옵션이므로
꼭 쓰지 않아도 상관없이 if 문만 써도 됩니다.
If else 문은 삼항 연산자와 비슷하지만
변수에 직접 대입할 수 없고,
가독성이 더 좋은 특징을 갖고 있습니다.
switch 문
switch 문은 주어진 표현식의 값을 가지는 case 문으로
실행 흐름(flow)을 이동시켜 다시 순차적으로 코드를 실행합니다.
각 case문은 표현식을 갖고 있으며
해당하는 값이 case에 없다면 default로 이동합니다.
//기본 문법
switch (표현식, a + 1 등등) {
case 표현식1, 2, true 등등:
switch문의 표현식에 해당할 경우 실행;
break;
case 표현식2:
문;
break;
default:
case가 없을 경우 실행
}
//실제 사용
var a = 1; // 여러 숫자를 넣어보자.
switch(a) {
case 1:
a = 0;
break;
case 2:
a = 3;
case 3:
a = 2;
case 4:
a = 1;
default:
a = 8;
}
console.log(a) // 0
주의할 것은 각 case에 해당하는 문들은 세미콜론(;)으로 끝나야 하며,
swtich는 실행흐름을 옮기기 때문에
Break; 가 없을 경우 밑의 case들이 차례대로 실행됩니다.
가령 위의 예시에서 var a = 2 나 3, 4, 5 등등으로 바꿀 경우
Case 2나 3, 4, default로 이동하여 그 밑의 문들이 모두 실행되므로
결과적으로 a = 8 이 나오게 됩니다.
If else 문은 주로 논리적으로 참인지 거짓인지가 중요하므로
If( a > b) 등의 표현식이 들어가는 반면에
Switch는 다양한 케이스에 해당하는 것이기 때문에 값이 주로 들어갑니다.
그리고 swtich의 경우 값을 예상할 수 있기 때문에
실행 트리에서 최적화가 되어 맞는 case를 찾는 것이
if 문이 여러 개 있을 때보다 빠를 수 있습니다.
둘 다 써보고 편한 곳에 맞게 쓰면 될 것 같습니다.
반복문
조건식의 평가 결과가 참인 이상 코드 블록을 실행합니다.
코드 블록이 끝나면, 조건식을 확인하여 참일 경우 다시 실행하고
거짓일 경우 종료합니다.
for 문
for 문은 다음과 같은 형태를 가집니다.
for (let i = 0; i < 10; i++) {
// 반복할 문
}
//무한루프
for(;;){
// 반복할 문
}
//이중루프
for(;;){
for(;;){
}
}
플로우는 다음과 같습니다.
1. let i = 0을 선언하고 할당합니다.
2. I < 10 조건식을 평가합니다. 참일 경우 블록을 실행합니다.
2-1. 거짓일 경우 블록을 종료하고 넘어갑니다.
3. 블록이 종료되고 나면 i++을 실행합니다.
4. 2번부터 3번을 반복합니다.
for 문은 몇 번이고 중복해서 쓸 수 있습니다.
가령 옛날에 알고리즘 문제 중 큐브를 푸는 게 있었는데,
10중 for문으로 푼 레전드가 한 명 있었습니다.
while문
while문은 if와 섞여있는 듯한 컨셉입니다.
while의 표현식이 참인 한에서 계속해서 반복 실행합니다.
for문과 유사하나 몇 번이나 돌아갈지 잘 모를 때 주로 사용합니다.(가독성 측면에서도 좋습니다.)
while(표현식){
//반복될 문
}
//실제 사용
let a = 0;
let b = 10;
while(a < b){
console.log(a);
a++;
}
//0 ~ 9까지 출력됩니다.
//무한루프
while(true){
//반복할 문
}
Do - while 문
do while문은 while문과 다르게 무조건 한 번 실행되는 do가 추가되었습니다.
let a=0;
do {
a++;
}
while(a<1){
console.log(‘실행안되는코드‘);
}
do는 조건이 없으므로 무조건 한 번 실행되므로
위 코드에서 do가 종료될 경우 a=1이 들어가 있는 상황이기 때문에
while(1 <1) 이 되어 while문이 실행되지 않습니다.
break문
break 문은 레이블 문과 반복문을 탈출할 때 쓰입니다.
레이블 문이란 swtich 문의 case 나 default처럼
레이블을 달아서 실행 순서를 바꿀 때 사용하는 문입니다.
//레이블 문
first: for (let i=0; i<10; i++){
for (let j=0; j<10; j++){
if (i===2) break first;
console.log(i); // 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1
}
}
//반복문
for (let i=0; i<10; ++i){
if (i===2) break;
console.log(i) // 0, 1
}
for문이 중첩되어 있을 때 flag 등을 사용해서 탈출하기는 번거로우므로
레이블 문을 사용하고는 합니다만 그 외의 경우에는 가독성을 심각하게 해치므로
사용하지 않습니다.
Swtich문에서도 break는 쓰이지만, 그 외의 경우는 모두 반복문에 사용됩니다.
continue문
continue문은 그대로 진행하라는 뜻이 아니라
돌아가서 다시 진행하라는 뜻에 가깝습니다.
특정 상황에서 연산을 패스하고 싶을 경우 주로 사용합니다.
for (let i=0;i<5; i++){
if (i === 3) continue;
console.log(i); //0,1,2,4
}
I가 3이 될 때 if 문을 타고, continue 문을 발견했으므로 for문의 처음으로 돌아갑니다.
가독성에 굉장히 좋기 때문에 많이 사용하는 편입니다.
이 외에도 객체의 프로퍼티를 순회하는 for - in 문도 있고,
iterable을 순회하는 for - of 문도 있지만,
나중에 객체와 iterable을 포스팅한 후 적도록 하겠습니다.
'프론트앤드' 카테고리의 다른 글
자바스크립트 ES6 함수 구분 - 일반 함수, 메서드, 화살표 함수 (0) | 2023.03.09 |
---|---|
[자바스크립트] 클로저를 이용하여 속성값을 은닉하여 사용하기 (0) | 2023.03.08 |
컴퓨터 프로그래밍 자바스크립트 데이터 타입과 연산자 (0) | 2023.02.01 |
쉽게 정리한 컴퓨터 프로그래밍 자바스크립트 변수 (0) | 2023.01.31 |
자바스크립트에 대한 간단한 역사와 배경지식 (0) | 2023.01.31 |