모던 자바스크립트 Deep Dive - 08.제어문 & 수업내용 추가 정리

지영·2021년 12월 3일
0

JavaScript

목록 보기
5/37
post-thumbnail

제어문

  • 조건에 따라 코드 블록을 실행하거나 반복실행할 때 사용한다
  • 제어문을 사용하면 코드의 실행흐름을 인위적으로 제어할 수 있다

8.1 - 블록문

  • 0개 이상의 문을 중괄호로 묶은 것
  • 코드 블록 또는 블록
  • 블록문을 하나의 실행 단위로 취급한다
  • 일반적으로 제어문이나 함수를 정의할 때 사용하는 것이 일반적이다
  • 블록문은 자체 종결성을 갖기 때문에 블록문의 끝에는 세미콜론(;)을 붙이지 않는다

✍️ 블록문

// 블록문
{
  var foo = 10;
}

// 제어문
var x = 1;
if (x < 10) {
  x++;
}

// 함수 선언문
function sum(a, b) {
  return a + b;
}

블록문

  • 블록 안에 있는 문
  • 객체 리터럴 안의 문과는 다르다

8.2 - 조건문

  • 조건식은 불리언 값으로 평가될 수 있는 표현식

8.2.1 - if...else 문

  • if문의 조건식이 불리언 값이 아닌 값으로 평가된다면
    암묵적으로 불리언 값으로 강제 변환되어 실행할 코드 블록을 결정
  • 조건에 따라 실행될 코드 블록을 늘리고 싶으면 else if문을 사용한다

✍️순차적으로 조건을 판별하면서 가장 처음 만나는 true인 조건의 블록을 수행하고 빠져나간다

if (condition1) {
	...body
} else if (condition2) {
	...body
} else if (condition3) {
	...body
} else {
	...body
}
  • 조건문은 삼항 조건 연산자로 바꿔 쓸 수 있다

✍️ 삼항 조건 연산자

var x = 2;

// 0은 false로 취급된다.
var result = x % 2 ? '홀수' : '짝수';

✍️ 경우의 수가 세가지라면 다음과 같이 바꿔쓸 수 있다

var num = 2;

// 0은 false로 취급된다.
var kind = num ? (num > 0 ? '양수' : '음수') : '영';

8.2.2 switch문

  • 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮긴다
  • switch문의 표현식과 일치하는 case문이 없다면 실행 순서는 default문으로 이동한다
  • default문은 선택사항으로 , 사용할 수도 있고 사용하지 않을 수 있다
switch (표현식) {
    case 1:
        실행할 명령
        break;
    case 2:
        실행할 명령
        break;
    case n:
        실행할 명령
        break;
    default:
        switch문의 표현식과 일치하는 case문이 없을 때 실행할 명령
        break;
}
  • 표현식은 불리언 값보다는 문자열이나 숫자 값인 경우가 많다
  • switch문은 논리적 참,거짓보다는 다양한 상황(case)에 따라 실행할 블록을 결정할 때 사용한다

조건문

✍️ 조건문 연습문제

const number = 10;

if (number >= 10) {
  console.log("10 이상입니다.");
} else if (number < 10) {
  console.log("10 미만입니다.");
} else if (number === 10) {
  console.log("10 입니다.");
}

// 비교연산자 사용하지 않는다.
// 10보다 크거나 같은 경우에는 '10 이상입니다.'
// 10보다 작은 경우에는 '10 미만입니다.'
// 10과 같은 경우에는 '10 입니다.'

✍️ 삼항연산자 연습문제

const number = 10;

console.log(number >= 10 ? "10 이상입니다" : "10 미만입니다")

//console에 찍을 경우 삼항연산문 자체를 console.log()의 인자로 입력한다
// 10보다 크거나 같은 경우에는 '10 이상입니다.'
// 10보다 작은 경우에는 '10 미만입니다.'

✍️ switch문 연습문제

const 재료 = "삼겹살";

// 재료가 삼겹살이면 '오늘의 저녁 메뉴는 삼겹살 김치찜'
// 재료가 차돌박이면 '오늘의 저녁 메뉴는 차돌된장'
// 메뉴에 없는 재료라면 '메뉴에 존재하지 않는 재료입니다.'

switch (재료) {
  case "삼겹살":
    console.log("오늘의 저녁 메뉴는 삼겹살 김치찜");
    break;
  case "차돌박이":
    console.log("오늘의 저녁 메뉴는 차돌된장");
    break;
  default:
    console.log("메뉴에 존재하지 않는 재료입니다.");
}

8.3 - 반복문

  • 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다
  • 그 후 조건식을 다시 평가하여 여전히 참인 경우 코드 블록을 다시 실행한다 -> 이는 조건식이 거짓을 때까지 반복된다

8.3.1 - for 문

  • 초기식, 조건식, 증감식이 하나의 괄호(( )) 안에 모두 명시되는 형태
  1. 초기식을 실행한다.
  2. 조건식을 판별한다.
    • 조건식이 참인 경우 {}안을 1회 실행하고 증감식으로 이동한다.
      • 증감식을 실행한 후 다시 조건식으로 이동한다.
    • 조건식이 거짓인 경우 {} 블록을 실행하지 않고 빠져나간다.
for (초기식; 조건식; 증감식) {
    조건식이 참인 경우 반복 실행될 문;
}

8.3.1 - while 문

  • for문은 반복 횟수가 명확할 때 주로 사용하고 while문은 반복 횟수가 불명확할 때 주로 사용한다
  • 조건식의 평가 결과가 불리언 값이 아니라면 불리언 값으로 강제 변환하여 논리적 참,거짓을 구별한다
초기식
while (조건식) {
    ... 반복적으로 수행될 구문 ...
    증감식
}
  • 조건식의 평가 결과가 언제나 참이면 무한루프가 된다
  • 무한루프에서 탈출하기 위해서는 코드 블록 내에 if문으로 탈출 조건을 만들고 break문으로 코드 블록을 탈출한다
초기식
while (조건식) {
    ... 반복적으로 수행될 구문 ...
    증감식
  if(조건식) break;
}

반복문

  • break를 통해 반복문을 종료시킬 수 있다
  • break를 쓰지 않으면 자동으로 continue가 된다 (continue문은 알지 않아도 된다)
  • 후위연산자를 주로 사용한다
  • 반복문 안에 반복문을 넣는 중첩 반복문도 사용 가능하지만 피해야 하는 케이스이다.
  • while문은 break해주는 조건을 잘 생각해야한다 → 무한루프 될 수 있다
  • 블록안에서 선언되는 변수나 상수는 그 블록 안에서만 유효하다.
  • 반복문 블록안에서 선언되는 변수나 상수는 그 회차에서만 유효하고 새로운 회차의 반복에서는 기존 변수는 삭제되고 새롭게 생성된다

✍️ 반복문 & 조건문 연습문제 -> 반복문과 조건문을 이용하여 1부터 10까지 숫자 중 짝수만을 console에 찍어주세요

for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) {
    console.log(i);
  }
}

8.4 - break 문

  • break문은 레이블문 , 반복문 또는 switch문의 코드 블록을 탈출한다
  • 레이블 문이란 식별자(변수를 식별할 수 있는 변수명)가 붙은 문을 말한다
  • 레이블 문을 탈출하려면 break문에 레이블 식별자를 지정한다
// foo라는 식별자가 붙은 레이블 블록문
foo: {
  console.log(1);
  break foo; // foo 레이블 블록문을 탈출한다
  console.log(2);
}

cosole.log("Done!");
  • 중첩된 for문의 내부 for문에서 break문을 실행하면 내부 for문을 탈출하여 외부 for문으로 진입한다
  • 레이블 문은 중첩된 for문 외부로 탈출할 때 유용하지만 그 밖의 경우에는 일반적으로 권장하지 않는다
    -switch문의 break문은 레이블 식별자를 지정하지 않는다
  • break문은 불필요한 반복을 회피할 수 있어 유용하다
profile
천천히 운영되는 개발 블로그

0개의 댓글