[모던 자바스크립트 Deep Dive] 8장. 제어문

2024. 3. 22. 09:54·웹 프로그래밍/JavaScript | TypeScript
반응형

제어문

  • 제어문은 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.
  • 제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다.
  • 그러나 코드의 실행 순서 변경 시 코드의 흐름을 직관적으로 이해하는 데 방해가 되고 가독성을 해칠 수도 있다. 가독성이 좋지 않은 코드는 오류를 발생시키는 원인이 된다. 👉 forEach, map, filter, reduce와 같은 고차함수는 제어문의 사용을 억제해 복잡성을 해결할 수 있다. 

 

8.1. 블록문

블록문

  • 0개 이상의 문을 중괄호로 묶은 것으로, 코드 블록 또는 블록이라고 부르기도 한다.
  • js는 블록문을 하나의 실행 단위로 취급한다. 

 

8.2. 조건문

8.2.2. switch문

  • if ... else문은 논리적 참, 거짓으로 실행할 코드 블록을 결정한다.
  • 반면 switch문은 논리적 참, 거짓보다는 다양한 상황(case)에 따라 실행할 코드 블록을 결정하는데 사용된다.

폴 스루

var a = 5;

switch (a) {
  case 1:
    console.log("1");
  case 3:
    console.log("3");
  case 5:
    console.log("5");
  case 7:
    console.log("7");
}

/*
실행결과
5
7
*/

switch문의 표현식의 평가 결과와 일치하는 case문으로 이동해 실행한 뒤 switch문을 탈출하지 않고 switch문이 끝날 때까지 이후의 모든 case문과 default 문을 실행하는 것

👉 해결방안: case문에 `break` 키워드를 사용해 코드 블록에서 탈출하도록 해야 한다.

var a = 5;

switch (a) {
  case 1:
    console.log("1");
    break;
  case 3:
    console.log("3");
    break;
  case 5:
    console.log("5");
    break;
  case 7:
    console.log("7");
    break;
}

//실행결과: 5

반대로 폴 스루를 이용해 여러 개의 case문을 하나의 조건으로 사용할 수도 있다.

var a = 5;

switch (a) {
  case 1:
  case 3:
  case 5:
    console.log("1, 3, 5");
    break;
  case 7:
    console.log("7");
    break;
}

//실행결과: 1, 3, 5

 

만약 if ... else 문으로 해결할 수 있다면 switch문보다 if ... else문을 사용하는 편이 좋다.

하지만 조건이 너무 많아서 if ... else 문보다 switch문을 사용했을 때 가독성이 더 좋다면 switch문을 사용하는 편이 좋다.

 

8.3. 반복문

반복문을 대체할 수 있는 자바스크립트의 다양한 기능

  • forEach 메서드: 배열을 순회할 때 사용
  • for ... in: 객체의 프로퍼티를 열거할 때 사용
  • for ... of: ES6에서 도입문 이터러블을 순회

8.3.1. for문

무한루프

for(;;){...}

 

8.4. break문

break: 레이블 문, 반복문, 또는 switch문의 코드 블록을 탈출한다. 그 이외의 코드블록에서 break문을 사용하면 syntaxError가 발생한다.

 

레이블문

// foo라는 식별자가 붙은 레이블문
foo: console.log('foo');
  • 식별자가 붙은 문
  • 프로그램의 실행 순서를 제어하는 데 사용
  • switch문의 case문과 default문도 레이블문임.

레이블 문을 탈출하려면 break문에 레이블 식별자를 지정한다.

 

// foo라는 식별자가 붙은 레이블문
foo: {
  console.log(1);
  break foo;
  console.log(2);
}
console.log("Done!");

// 실행결과
// 1
// Done!​

 

중첩된 for문의 내부 for문에서 break문을 실행하면 내부 for문을 탈출하여 외부 for문으로 진입한다.

이때 내부 for문이 아닌 외부 for문을 탈출하기 위해서는 레이블 문을 사용해야 한다.

outer: for (var i = 0; i < 3; i++) {
  for (var j = 0; j < 3; j++) {
    if (i + j === 3) break outer;
    console.log(`inner [${i}, ${j}]`);
  }
}
console.log("Done");

// 실행결과
// inner [0, 0]
// inner [0, 1]
// inner [0, 2]
// inner [1, 0]
// inner [1, 1]
// Done

레이블 문 사용 시 프로그램 흐름이 복잡해져 가독성이 나빠지므로 이중 for문 탈출 용도 이외에는 사용하지 않는 것을 권장한다.

 


출처: 모던 자바스크립트 Deep Dive (이웅모 저, 위키북스)

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로그래밍 > JavaScript | TypeScript' 카테고리의 다른 글

[모던 자바스크립트 Deep Dive] 10장. 객체 리터럴  (0) 2024.03.27
[모던 자바스크립트 Deep Dive] 9장. 타입 변환과 단축 평가2 (단축 평가)  (0) 2024.03.25
[모던 자바스크립트 Deep Dive] 9장. 타입 변환과 단축 평가1 (타입 변환)  (1) 2024.03.22
[모던 자바스크립트 Deep Dive] 7장. 연산자  (0) 2024.03.21
[모던 자바스크립트 Deep Dive] 6장. 데이터 타입  (0) 2024.03.21
[모던 자바스크립트 Deep Dive] 5장. 표현식과 문  (0) 2024.03.20
'웹 프로그래밍/JavaScript | TypeScript' 카테고리의 다른 글
  • [모던 자바스크립트 Deep Dive] 9장. 타입 변환과 단축 평가2 (단축 평가)
  • [모던 자바스크립트 Deep Dive] 9장. 타입 변환과 단축 평가1 (타입 변환)
  • [모던 자바스크립트 Deep Dive] 7장. 연산자
  • [모던 자바스크립트 Deep Dive] 6장. 데이터 타입
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (1)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    타입스크립트
    뉴렉처
    spring boot
    AWS
    SWEA
    클론 프로젝트
    React
    Next.js
    Jiraynor Programming
    자바
    플러터
    프로젝트
    mysql
    블로그 제작
    구현
    자바스크립트
    리액트
    포트폴리오
    ZeroCho
    강의내용정리
    bfs
    d3
    프로그래머스
    웹사이트
    알고리즘
    Til
    공식문서
    백준
    컴퓨터네트워크
    파이썬
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[모던 자바스크립트 Deep Dive] 8장. 제어문
상단으로

티스토리툴바