[JS]8장 제어문

JH Cho·2022년 12월 12일
0

모던JS DeepDive 공부

목록 보기
8/27
post-thumbnail

모던 JS 딥다이브 공부 정리용 글입니다.

8장 제어문

  • 제어문은 조건에 따라 코드 블록은 실행(조건문)하거나 반복 실행(반복문)할 때 사용

8.1_ 블록문

  • 블록문은 0개 이상의 문을 중괄호로 묶은 것.
  • 코드 블록, 블록이라고 함.
  • JS는 블록문을 하나의 실행 단위로 취급.
// 블록문
{
  var foo = 10;
  console.log(foo);
}

// 제어문
var x = 0;
while (x < 10) {
  x++;
}
console.log(x); // 10

// 함수 선언문
function sum(x, y) {
  return x + y;
}
console.log(sum(1, 2)); // 3

8.2_ 조건문

  • 조건문은 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정
  • if...else문 & switch문

8.2.1_ if...else문

if (조건식1) {
  // 조건식1이 참이면 이 코드 블록이 실행된다.
} else if (조건식2) {
  // 조건식2이 참이면 이 코드 블록이 실행된다.
} else {
  // 조건식1과 조건식2가 모두 거짓이면 이 코드 블록이 실행된다.
}

//실행문이 하나이면 코드블록 없이 써도 됨.
if (조건식1) console.log("hi")
else if (조건식2) console.log("bye")
else console.log("good")

8.2.2_ switch문

  • switch문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 흐름을 옮긴다.
  • 일치하는 case가 없으면 default문으로 옮긴다.
// 월을 영어로 변환한다. (11 → 'November')
var month = 11;
var monthName;

switch (month) {
  case 1:
    monthName = 'January';
    break;
  case 2:
    monthName = 'February';
    break;
  case 3:
    monthName = 'March';
    break;
  case 4:
    monthName = 'April';
    break;
  case 5:
    monthName = 'May';
    break;
  case 6:
    monthName = 'June';
    break;
  case 7:
    monthName = 'July';
    break;
  case 8:
    monthName = 'August';
    break;
  case 9:
    monthName = 'September';
    break;
  case 10:
    monthName = 'October';
    break;
  case 11:
    monthName = 'November';
    break;
  case 12:
    monthName = 'December';
    break;
  default:
    monthName = 'Invalid month';
}

console.log(monthName); // November
  • break를 붙여주지 않으면 다음 case로 넘어간다

  • default문은 어차피 마지막 실행문이라 break 필요 없음.

  • 사용 예시 2)

var year = 2000; // 2000년은 윤년으로 2월이 29일이다.
var month = 2;
var days = 0;

switch (month) {
  case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    days = 31;
    break;
  case 4: case 6: case 9: case 11:
    days = 30;
    break;
  case 2:
    // 윤년 계산 알고리즘
    // 1. 년도가 4로 나누어 떨어지는 해는 윤년(2000, 2004, 2008, 2012, 2016, 2020…)
    // 2. 그 중에서 년도가 100으로 나누어 떨어지는 해는 평년(2000, 2100, 2200...)
    // 3. 그 중에서 년도가 400으로 나누어 떨어지는 해는 윤년(2000, 2400, 2800...)
    days = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? 29 : 28;
    break;
  default:
    console.log('Invalid month');
}

console.log(days); // 29

3_ 반복문

  • for문, while문, do...while문
  • for...in문, for...of문

8.3.1_ for문

for(초기화식; 조건식; 증감식){
  조건식 참이면 반복 실행될 문
}
  • 초기화식, 조건식, 증감식 비워도 됨.

8.3.2_ while문

  • for문은 반복 횟수가 명확할 때!
  • while문은 반복 횟수가 불명확할 때 주로 사용.
var count = 0;

// 무한루프
while (true) {
  console.log(count);
  count++;
  // count가 3이면 코드 블록을 탈출한다.
  if (count === 3) break;
} // 0 1 2

8.3.3_ do...while문

var count = 0;

// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
do {
  console.log(count);
  count++;
} while (count < 3); // 0 1 2
  • do...while 문은 코드 블록 먼저 실행하고 조건식을 평가.
  • 코드 블록은 무조건 한 번 이상 실행됨.

8.4 break문

  • break문은 레이블문, 반복문, switch문의 코드 블록을 탈출한다.

  • 그 외 if문 등에서 사용하면 Syntax Error 발생.

  • 레이블 문? // 식별자가 붙은 코드 블록.

foo: {
  console.log(1)
  break foo;
  console.log(2)
}
  • 중첩 반복문의 내부 반복문에서 break 사용 -> 외부 반복문으로 탈출
  • 걍 아예 반복문을 나가고 싶다 ?
outer: for (var i = 0; i < 3; i++) {
  for (var j = 0; j < 3; j++) {
    // i + j === 3이면 외부 for 문을 탈출한다.
    if (i + j === 3) break outer;
  }
}

console.log('Done!');
  • 근데 레이블문은 코드 가독성을 해치기 때문에 사용 지양.

8.5_ continue문

  • continue 문은 반복문의 코드 블록 실행을 현 지점에서 중단
  • 반복문의 증감식으로 실행 흐름을 이동시킴
// continue 문을 사용하지 않으면 if 문 내에 코드를 작성해야 한다.
for (var i = 0; i < string.length; i++) {
  // 'l'이면 카운트를 증가시킨다.
  if (string[i] === 'l') {
    count++;
    // code
    // code
    // code
  }
}

// continue 문을 사용면 if 문 밖에 코드를 작성할 수 있다.
for (var i = 0; i < string.length; i++) {
  // 'l'이 아니면 카운트를 증가시키지 않는다.
  if (string[i] !== 'l') continue;

  count++;
  // code
  // code
  // code
}
profile
주먹구구식은 버리고 Why & How를 고민하며 프로그래밍 하는 개발자가 되자!

0개의 댓글