본문 바로가기

프로그래밍/js

lessons 8. 제어문

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

'프로그래밍 > js' 카테고리의 다른 글

lessons 10. 객체  (0) 2023.02.05
lessons 9. 타입 변환과 단축 평가  (1) 2023.02.05
lessons 7. 연산자  (0) 2023.01.31
lessons 6. 데이터 타입과 변수  (1) 2023.01.30
lessons 5. 자바스크립트 기본 문법  (0) 2023.01.30