일반적으로 코드는 위에서 아래로 순차적으로 실행 된다.
제어문을 사용해서 코드 실행순서를 인위적으로 변경할 수 있다, JUMP 시키는 것!
1. 블록문
0개 이상의 문을 중괄호로 묶은 것 {} 코드 블럭으로도 불림
Js는 블록문을 하나의 실행 단위로 취급 => 함수가 있고 그 함수를 호출 한다면 호출된 함수가 하나의 실행 단위가 된다
제어문, 함수를 정의할때 일반적으로 사용한다!
변수를 선언할때도 블록문을 사용해서 할 수 있지만 굳이... 하지 않는다
{
var age = 24;
}
if (age >= 20){
console.log("성인 입니다.");
}else{
console.log("성인 아닙니다.");
}
function sum(a, b){
return a * b;
}
2. 조건문
불리언 값으로 평가 될 수 있는 표현식을 사용하여 프로그램 흐름 제어
if 는 꼭 사용해야 하는 키워드 이지만 else if, else는 사용할 수도 아닐수도~
코드블록내의 문이 하나뿐이라면 생략이 가능하지만, 다른 줄의 코드와 통일성을 유지하기 위해서 저는 하는 편입니다...ㅎ
📌 대부분의 if, else 문은 삼항 연산자로 변경 가능
var age = 24;
var result = age >= 20 ? "성인" : "성인 아님."
console.log(result) // 성인
삼항 연산자는 바로 앞장에서 살펴 봤듯이, 값으로 평가되고 + 가독성이 좋기 때문에 if else 문의 내용이 복잡하지 않다면 가급적 삼항 연산자를 사용하자~
📌 switch 문
표현식을 평가하고 그 값과 일치하는 표현식인 Case 문을 실행
만약, 일치하는 표현식이 없는 경우에는 Default 문을 실행,
따라서 Switch 문을 사용할 때는 꼭 Default 문을 정의 해주어야 한다!
📌switch vs if, else
문 | 조건 |
Switch | 표현식이 논리적 참, 거짓보다는 다양한 상황이 있는 경우 |
if, else | 표현식의 값이 논리적 참, 거짓에 의존하는 경우 |
var day_number = 3;
var day_char;
switch(day_number){
case 1 : day_char = 'Monday'
break;
case 2 : day_char = 'Thuseday'
break;
case 3 : day_char = 'Wednesday'
break;
case 4 : day_char = 'Thursday'
break;
case 5 : day_char = 'Friday'
break;
case 6 : day_char = 'Saturday'
break;
case 7 : day_char = 'Sunday'
break;
default : day_char = 'Invalid Input'
break;
}
console.log(day_char) // Wednesday
switch 문에서 각 case 문에 break 문을 추가해주지 않으면?
case에 맞는 문을 실행하고도 switch문을 탈출하지 않고 끝날때까지 이후에 있는 모든 case문과 default문을 실행하므로
day_char = 'Invalid Input' 가 된다
따라서 각 case에 맞는 문을 실행하고 break를 통해서 switch 문을 실행 하도록 해야함
default 문에는 그 이후에 실행되는 문이 없기 때문에 break 생략 가능~
📌 switch 문의 폴스루 사용해보기
여러개의 case문을 하나의 조건으로 묶어서 사용할 수 있다
switch(month){
case1: case3: case5: case7: case8: case10: case12:
days = 31;
break;
case 4: case 6: case9: case 11:
days = 30;
break;
case 2:
// ~
}
3. 반복문
조건으로 사용되는 표현식이 거짓으로 평가될 때까지 코드 블록{} 반복 실행!
조건식에 어떤 식도 선언하지 않으면 무한루프가 된다. 참고해서 이 경우를 피하자~
for(;) {...}
반복문 | 상황 |
for(let i ~) | 반복 횟수가 정확한 경우 |
while(i ~) | 반복 횟수가 부정확한 경우 |
do ... while | 코드 블럭을 무조건 한번은 실행 시켜야 하는 경우 |
do ... while 문은 익숙하지 않아서 따로 기록해둔다
var x = 0;
do{
console.log(x); // 0
x += 1;
}while(count < 3);
위 코드에서 만약 x가 5로 시작하더라도 일단 콘솔에 5를 한번 출력하고 반복문을 종료하게 된다
4. break
반복문을 탈출하는 문
break 문에 식별자를 지정할 수 있다, 어떤 반복문을 빠져 나올것 인지에 대해서 명시적으로 표현이 가능하다
레이블 문, 반복문 이외의 문에서 break 문 사용 불가능
📌 식별자가 붙은 레이블 문 파악해보기
name : console.log("woong") // foo
엄밀히 따지자면,
swith 문의 case, default도 레이블 문인데 생략이 된 것.
레이블 문을 탈출하기 위해서 break 문에 식별자를 명시적으로 표시 해준다.
nums : {
console.log("1");
break nums; // nums 레이블 문 탈출
console.log("2"); // 실행 X
}
📌 이중반복문에서 레이블 문 활용하기
이중반복문에서 break 문을 사용하게 되면, 내부 for문을 탈출하게 되는데
레이블 문을 활용해서 바로 외부 for문을 탈출할 수 있도록 코드를 짤 수 있음!
outer : for(let i = 0; i < 10; i++){
for(let j = 0; j < 3; j++){
if(i + j == 5) break outer;
console.log(`i : ${i} j : ${j});
}
}
break문은 반복문을 더이상 진행하는게 프로그램에 의미가 없을때, 불필요한 반복을 피할수 있다는 장점이 있다!
5. contiune
반복문에 의해서 실행되는 코드 블럭을 continue 기준 시점에서 종료하고, 다시 반복문의 증감식으로 흐름을 변경 한다.
탈출하는 것이 아니라 조건식으로 다시 이동 한다.
continue 문 아래에 있는 코드들은 실행되지 않기 때문에 이를 활용해서
가독성을 높이거나 불필요한 작업들을 피할 수 있다.
📌 문자열에서 특정 문자 갯수 세기
var string = "my name is woong"
var target = "m"
var cnt = 0;
for(let i = 0; i < string.length; i++){
if(string[i] != target) continue;
cnt += 1;
}
console.log(cnt) // 2
'javascript > DeepDive' 카테고리의 다른 글
[DEEP DIVE] 10. 객체 리터럴 (0) | 2022.10.28 |
---|---|
[DEEP DIVE] 9. 타입 변환과 단축 평가 (3) | 2022.10.03 |
[DEEP DIVE] 7. 연산자 (0) | 2022.09.28 |
[DEEP DIVE] 6. 데이터 타입 (0) | 2022.09.26 |
[DEEP DIVE] 5. 표현식과 문 (0) | 2022.09.26 |