Language/JavaScript

ModernJS / 05 - 제어문

2023. 3. 3. 14:59
목차
  1. 1. 필요성
  2. 2. 블록문
  3. 3. 조건문
  4. 3-1. if … else 문
  5. 3-2. switch 문
  6. 3-3. if … else 문과 switch 문
  7. 4. 반복문
  8. 4-1. for 문
  9. 4-2. while 문
  10. 4-3. do … while 문
  11. 5. break 문
  12. 5-1. 레이블 문에서 break 문
  13. 6. continue 문
  14. 6-1. 사용

1. 필요성

조건에 따라 코드 블록을 실행하거나 반복 실행할 때 사용한다. 제어문을 사용하여 코드의 실행 흐름을 인위적으로 제어할 수 있으나 그로 인해 코드의 흐름을 혼란스럽게 만들 수도 있다. 그럼에도 제어문은 코딩을 하는데에 있어 큰 영향력을 주기에 확실하게 이해하는 것은 필요하다.

 


2. 블록문

0개 이상의 문을 중괄호로 묶은 것으로, 코드 블록 또는 블록이라고 부르기도 함
  • 블록문을 하나의 실행 단위로 취급
  • 언제나 문의 종료를 의미하는 자체 종결성을 갖기 때문에 블록문의 끝에는 세미콜론을 붙이지 않아도 된다

 


3. 조건문

주어진 조건식의 평가 결과에 따라 블록문의 실행을 결정
  • if…else 문, switch 문 2가지가 존재

 

3-1. if … else 문

주어진 조건식의 평가 결과에 따라 실행할 코드 블록을 결정

if (조건식) { 
	// 조건식이 "참" 이라면 실행할 코드 블록 
}
else { 
	// 조건식이 "거짓" 이라면 실행할 코드 블록 
}

조건식은 반드시 불리언 값으로 평가되어야 하며 필요 시에는 암묵적으로 불리언 값으로 변환하여 결정

 

else if 문을 사용하여 조건들을 추가 가능

if (조건식1) { 
	// 조건식1이 "참" 이라면 실행할 코드 블록 
}
else if (조건식2) { 
	// 조건식2가 "참" 이라면 실행할 코드 블록 
	// else if 는 여러 번 사용할 수 있다
}
else { 
	// 조건식1, 조건식2 모두 "거짓" 이라면 실행할 코드 블록 
}

 

3-1-1. if ... else 문과 삼항 조건 연산자

var score = 77;
var result1, result2;

// if ... else 문을 이용한 점수 결정
if (score >= 90) {
	result1 = "A 등급";
}
else if (score >= 50) {
	result1 = "B 등급";
}
else {
	result1 = "C 등급";
}

console.log(result1);

// 삼항 조건 연산자를 이용한 점수 결정
result2 = score>=50 ? (score >=90 ? "A 등급" : "B 등급") : "C 등급";

console.log(result2);

위의 예시는 같은 동작을 if … else 문으로 표현 했는가 삼항 조건 연산자로 표현 했는가의 차이이다. 04 - 연산자 파트에서 이미 공부했듯이 삼항 조건 연산자의 경우에는 값으로 평가되는 표현식 이기에 값처럼 사용하여 “result2” 변수에 할당하여 사용할 수 있지만 if … else 문의 경우 값처럼 사용할 수 없기에 변수에 할당할 수가 없다.

즉, 단순히 값을 결정하여 변수에 할당하는 경우에는 삼항 조건 연사자가, 조건에 따라 실행할 코드 블록의 복잡도가 클 경우에는 if … else 문을 사용하는 것이 코드의 가독성에 좋다.

 

3-2. switch 문

주어진 표현식과 일치하는 표현식을 갖는 case 문의 코드 블록을 실행

switch(표현식) {
	case 표현식1:
		// switch 문의 표현식과 표현식1이 일치하면 실행
		break;
	case 표현식2:
		// switch 문의 표현식과 표현식2가 일치하면 실행
		break;
	...
	default:
		// switch 문의 표현식과 모든 case 의 표현식이 일치하지 않는 경우 실행
}

주어지는 상황이 다양하며 그에 맞는 실행이 필요할 때 사용

→ switch 문의 표현식이 불리언 값보다는 문자열이나 숫자 값인 경우가 많음

 

3-2-1. 폴스루 fall through

var day = 3;
var dayStr;

switch(day) {
	case 0: dayStr = "Monday";
	case 1: dayStr = "Tuesday";
	case 2: dayStr = "Wednesday";
	case 3: dayStr = "Thursday";
	case 4: dayStr = "Friday";
	case 5: dayStr = "Saturday";
	case 6: dayStr = "Sunday";
	default: dayStr = "Invalid Day";
}

console.log(dayStr);
// 예상 결과는 Thursday
// 실제 결과는 Invalid Day

위의 switch 문의 결과는 “Invalid Day” 이다. 그러나 변수 day 의 값이 3이기에 결과는 “Thursday” 여야 한다. 이는 case 3문이 끝이 나더라도 switch 문을 탈출하지 않고 나머지 밑의 case 문들과 default 문까지 실행하기에 최종적으로 “Invalid Day” 가 출력되는 것이다. 이를 폴스루(fall through) 라고 부른다. 탈출하기 위해서는 break 문이 필요하다.

 

var day = 3;
var dayStr;

switch(day) {
	case 0: dayStr = "Monday";
		break;
	case 1: dayStr = "Tuesday";
		break;
	case 2: dayStr = "Wednesday";
		break;
	case 3: dayStr = "Thursday";
		break;
	case 4: dayStr = "Friday";
		break;
	case 5: dayStr = "Saturday";
		break;
	case 6: dayStr = "Sunday";
		break;
	default: dayStr = "Invalid Day";
}

console.log(dayStr); // Thursday

위처럼 필요한 위치에 break 문을 추가하면 day 에 입력된 값에 맞는 원하는 결과가 출력된다.

 

3-3. if … else 문과 switch 문

  • if … else 문으로 해결이 되는 수준이라면 switch 문 보다는 if … else 문 사용을 권장
    • switch 문은 case, default, break 등의 다양한 키워드를 사용하며 폴스루의 발생도 고려해야하기 때문
  • 만약 조건이 다양하거나 너무 많다면 switch 문을 사용하는 것이 가독성에 더 도움

 


4. 반복문

조건식의 평가 결과가 거짓일 때까지 코드 블록을 반복 실행
  • for 문, while 문, do…while 문 3가지가 존재

 

4-1. for 문

조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행

for(변수 선언 or 할당문 ; 조건식 ; 증감식) {
	// 조건식이 참인 경우 반복 실행
}

// for 문의 () 안에 어떤 식도 작성하지 않으면 무한루프가 되어 코드 블록을 무한히 반복 실행한다
for(;;) {
	...
}

 

구구단 7단을 실행하는 for 문의 예시

for(var i = 1 ; i < 10 ; i++) {
	console.log(`7 * ${i} = ${7*i}`);
}

// var i = 1   -> i 라는 변수를 선언하고 1 값으로 초기화
// i < 10      -> i 가 10 미만인 경우라면 참 -> 10 이상이 되면 반복문 실행 종료
// i++         -> 코드 블록이 한번 실행될 때마다 i 의 값이 +1

 

4-1-1. 중첩 for 문

for 문안에 for 문을 중첩하여 사용 가능

 

변수 값에 맞춰 별(”*”)을 출력하는 예시

for(var i = 1 ; i < 6 ; i++) {
	for(var cnt = 1 ; cnt <= i ; cnt++) {
		process.stdout.write("*"); // 줄바꿈 없이 이어서 출력
	}
	console.log(); // 단계가 끝날 때마다 줄바꿈
}

 

4-2. while 문

조건식의 평가 결과가 참이면 반복적으로 코드 블록을 실행

while(조건식) {
	// 조건식이 참인 경우 반복 실행
}

// while 문의 조건식이 항상 true 라면 무한루프가 되어 코드 블록을 무한히 반복 실행한다
while(true) {
	...
}

 

구구단 7단을 실행하는 while 문의 예시

var i = 1;

while(i < 10) {
	console.log(`7 * ${i} = ${7*i}`);
	i++;
}

// i < 10      -> i 가 10 미만인 경우라면 참 -> 10 이상이 되면 반복문 실행 종료
// i++         -> 한번 코드 블록이 실행되면 마지막에 i 의 값이 +1

 

while 문에서 무한루프로 구현할 때 특정 조건에서 탈출하고 싶다면 if 문과 break 문을 사용

// 무한루프를 이용한 구구단 7단
var i = 1;

while(true) {
	console.log(`7 * ${i} = ${7*i}`);
	i++;

	if(i >= 10) break;
	// 변수 i 의 값이 10이 되는 순간 무한루프를 break 문을 통해 탈출한다
}

 

4-2-1. while 문과 for 문

코드 블록의 반복 횟수가 명확하냐에 따라 주로 사용하는 문이 다름

  • 명확한 반복 횟수 → for 문을 주로 사용
  • 불명확한 반복 횟수 → while 문을 주로 사용

 

4-3. do … while 문

코드 블록을 먼저 실행하고 조건식을 평가

do {
 // 조건식이 참인 경우 반복 실행
 // 처음 do ... while 문이 실행되면 먼저 실행되기에 반드시 한번은 실행되는 코드 블록이다
} while(조건식)

 


5. break 문

속한 코드 블록을 탈출하는 역할
  • 레이블 문, 반복문, switch 문의 코드 블록에서 사용
  • 이 외에는 사용시 SyntaxError 발생
  • 반복문에서 불필요한 반복을 회피할 수 있어 유용함

 

5-1. 레이블 문에서 break 문

식별자가 붙은 문

yaho: {
	console.log("yaho~");
	break yaho;
	console.log("yaho again?");
}

// 위처럼 식별자가 붙은 문을 레이블 문이라 한다
// switch, case, default 문들도 레이블 문이다

outer: for(var i = 1; i < 10; i++) {
	for (var j = 1; j< 10; j++) {
		if((i===7) && (j===7)) {
			console.log("77 을 찾았어요");
			break outer;
		}
		console.log("77 을 못찾았어요")
	}
}

// i 와 j 모두 7 이라면 중첩 for 문 전체 탈출 -> 레이블 식별자를 이용
  • 중첩된 for 문 외부로 탈출할 때 유용
    • 중첩된 for 문의 내부 for 문에서 break 사용은 단순히 내부 for 문만을 탈출
    • 레이블 문 전체를 탈출 하기 위해서는 “break 식별자;” 를 사용
  • 프로그램의 흐름이 복잡해져 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 이 외의 경우는 사용을 가급적이면 줄이는 것이 좋음

 


6. continue 문

코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동

break 문 처럼 반복문 자체를 탈출하는 것은 아님

var count = 0;

for(var i = 1; i < 11; i++) {
	if(i%2) continue;
	count++;
}

console.log(count);
// if(i%2) continue -> 만약 i 값이 짝수라면 중단하고 다음 반복 실행으로 이동
//                  -> 만약 i 값이 홀수라면 continue 는 실행하지 않고 count++ 실행

 

6-1. 사용

var count = 0;

for(var i = 1; i < 11; i++) {
	if(!(i%2)) count++;
}

console.log(count);

위의 코드처럼 continue 문을 사용하지 않았을 때 더욱 간결하고 간편해지는 경우도 존재한다. 만약 if 문 내에서 실행해야 할 코드 블록이 길거나 복잡하거나 하는 경우에는 continue 문을 사용하는 것이 가독성을 더 높일 수도 있다.

 


저작자표시 비영리 변경금지 (새창열림)
  1. 1. 필요성
  2. 2. 블록문
  3. 3. 조건문
  4. 3-1. if … else 문
  5. 3-2. switch 문
  6. 3-3. if … else 문과 switch 문
  7. 4. 반복문
  8. 4-1. for 문
  9. 4-2. while 문
  10. 4-3. do … while 문
  11. 5. break 문
  12. 5-1. 레이블 문에서 break 문
  13. 6. continue 문
  14. 6-1. 사용
'Language/JavaScript' 카테고리의 다른 글
  • ModernJS / 07 - 객체 리터럴
  • ModernJS / 06 - 타입 변환
  • ModernJS / 04 - 연산자
  • ModernJS / 03 - 데이터 타입
YaHoDev
YaHoDev
YaHo 개발과 일상 일기
YaHoDev
YaHo's Dev Diary
YaHoDev
전체
오늘
어제
  • YaHo (50)
    • Network (6)
      • SDN (2)
      • SD-RAN (4)
    • Language (10)
      • JavaScript (10)
    • BlockChain (6)
    • 알고리즘 문제 (24)
      • 프로그래머스 (24)
    • 야호 먹지도 (4)

블로그 메뉴

  • 모던JS 깃허브

인기 글

최근 글

태그

  • javascript
  • 자바스크립트
  • SD-RAN
  • 프로그래머스
  • 모던 자바스크립트 Deep Dive
  • LV2
  • 비트코인
  • js
  • ONF
  • Ran
hELLO · Designed By 정상우.
YaHoDev
ModernJS / 05 - 제어문
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.