프로그래밍/js

lessons 8. 제어문

병뚜 2023. 2. 3. 13:12

2023.02.05

자바스크립트 스터디 3회차

공부 사이트: https://poiemaweb.com/

 

8. 제어문

1) 블록문

0개 이상의 문들을 중괄호로 묶은 것. 문의 끝에는 세미콜론을 붙이나, 블록문은 세미콜론을 붙이지 않는다.

// 블록문
{
     var num = 10;
     console.log(num);
}

 

2) 조건문

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

조건식 = boolean 값으로 평가될 수 있는 표현식

 

① if else문

- 조건식의 평가 결과가 boolean이 아니라면 boolean 값으로 강제 변환되어 논리적 참/거짓을 판단

- 조건식을 추가하기 위해서 else if문 사용

- 코드블록 내 문이 하나라면 중괄호 생략 가능

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

var x = 2;
var result1 = x % 2 ? '홀수' : '짝수';      //삼항 조건 연산자
console.log(result1);       //짝수

var result2 = num ? (num > 0 ? '양수' : '음수') : '영';
console.log(result2);       //양수

[TIP] 삼항 조건 연산자

condition ? exprIfTrue : exprIfFalse

 

② switch문

- 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 순서를 이동

- case문, defualt문

switch (표현식) {
	case 표현식1:
	    //실행구문
	    break;
	case 표현식2:
 	    //실행구문
	    break;
	default:
	    //실행구문 (switch문의 표현식과 일치하는 표현식 갖는 case문이 없을 때)
	    break;
}

※ 주의할 점: break문이 없으면 표현식과 일치하는 case문을 실행해도 switch문을 탈출하지 않는다. 즉, 일치하는 case문으로 실행 순서 이동 후 그 아래에 있는 다른 case문도 모두 실행하게 된다. → 폴스루(fall through)

 

var score = 'C'

switch (score) {
	case 'A':
	    console.log('A등급입니다. ');
	case 'B':
 	    console.log('B등급입니다. ');
	case 'C':
 	    console.log('C등급입니다. ');
	default:
	    console.log('D등급입니다. ');
}

switch문은 다양한 키워드를 사용해야 하고, 폴스루가 발생하는 등 문법이 복잡하다. if else 문 사용을 권장.

 

 

3) 반복문

조건식 평가 결과가 참이면 코드 블록 실행. 그 후 조건식을 다시 검사하여 여전히 참이면 코드 블록 재실행 ...

조건문이 거짓일 때까지 반복됨.

 

① for 문: 조건식이 거짓으로 판별될 떄까지 코드블록 반목 실행 

for(초기화식;조건식;증감식){
     //조건식이 참인 경우 반복실행
}

[for문 실행순서]

- 초기화식 실행 

- 조건식 평가

- 코드 블록 실행

- 증감식 실행

.... 증감식 실행 종료 후 다시 조건식을 평가하는데, 여기서 평가 결과가 true면 반복, false면 종료된다.

// 무한 루프
for (;;) {
     ....
}

 

② while 문

- 조건식 평가 결과가 참이면 코드블록 반복 실행.

- 조건식의 평가 결과가 boolean 값이 아니면 boolean 값으로 강제 변환되어 논리적 참/거짓을 구분.

var count = 0;

while (count < 3) {
     console.log(count);
     count++;
}


//무한루프
while (true) {
     ...
}

 

무한 루프를 탈출하기 위해서는 코드 블럭 내 탈출 조건을 만들어 주면 된다.

var count = 0;

// 무한루프
while (true) {
  console.log(count);
  count++;
  
  if (count === 3) break;
}

 

③ do while문: 코드 블록을 먼저 실행하고 조건식을 평가한다. 코드 블록은 최소 1회 실행.

var count = 0;

// 무한루프
do {
  console.log(count);
  count++;
  
} while(count < 3);

 

④ break 문

- 레이블 문, 반복문, switch문의 코드 블록을 탈출

- if문에 사용하면 문법 에러

- 레이블 문(Label statement): 식별자가 붙은 문. 프로그램의 실행 순서를 제어하기 위해 사용함 (case문, default문 등..)

// test라는 레이블 식별자가 붙은 문
test1: console.log('test');

test2: {
     console.log('사과');
     break test2;
     console.log('딸기');
}

console.log('냠냠');

 

- 중첩 for문의 내부 for문에서 break문 사용 시 내부 for문을 탈출함. 외부 for문으로 진입

- 외부 for문까지 한번에 탈출하려면 레이블 문을 사용하면 된다.

test: for(var i=0;i<3;i++){
	for(var j=0;j<3;j++){
		console.log(i + "," + j)
		if(i+j ===3) break test;
	}
}
console.log('완료');

- 중첩 for문 탈출 시 레이블 문은 유용하나, 그 외의 경우 레이블 문을 권장하지 않음. 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류 발생 가능성이 높아지기 때문임.

 

 

⑤ continue 문

- 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문 증감식으로 이동. 탈출X

var string = 'Hello World.';
var count = 0;

for (var i = 0; i < string.length; i++) {
  if (string[i] !== 'l') continue;  //i번째 문자가 l이면 continue 사용함 (count++; 수행하지 않음)
  count++;
}

console.log(count); 

// 참고로 String.prototype.match 메소드를 사용해도 같은 동작을 한다.
console.log(string.match(/l/g).length); // 3