자바스크립트 딥다이브 - 제어문

ChoiYongHyeun·2023년 12월 6일
0

제어문은 조건에 따라 코드블록을 실행하거나 반복 할 때 사용한다.

일반적으로 코드의 실행은 위에서 아래 방향으로 순차적으로 실행되지만

제어문을 이용하면 실행 흐름을 인위적으로 제어 할 수 있다.

블록문

블록문은 0개 이상의 문을 중괄호로 묶은 것으로 코드블록 또는 블록이라고 부르기도 한다.

자바스크립트는 블록문을 하나의 실행 단위로 취급하며 일반적으로 제어문이나 함수를 젖ㅇ의 할 때 사용하는 것이 일반적이다.

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

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

// 함수 선언문

function sum(a,b){
  return a+b;
}

다음처럼 블록문은 혼자서도 쓰일 수 있고 , 제어문이나 함수 선언문 등에서 코드블록 형태로 사용 할 수 있다.

조건문

조건문은 주어진 조건식의 평과 결과에 따라 코드 블록의 실행을 결정한다 .

if (조건식){
  true 일 때 실행 할 코드
} else {
  false 일 때 실행 할 코드 
}

다음처럼 사용 가능하다.

조건문이 3개 이상일 때는 if , else if , else 로 사용 가능하다.

스위치문

switch (expression) {
  case value1:
    // value1에 해당하는 코드 실행
    break;
  case value2:
    // value2에 해당하는 코드 실행
    break;
  // 추가적인 case들...
  default:
    // 어떤 경우에도 해당하지 않을 때 실행되는 코드
}

다음처럼 expression 에 들어가있는 값이 무수하게 많은 case 중 하나에 해당된다면 그 밑에 있는 코드를 실행하고 break 를 통해 switch 문을 빠져나갈 수 있다.

스위치문은 무수하게 많이 나열된 if else if .. 문과 같은 역할을 하지만

스위치문은 불리언 값이 아닌 값을 case 로 넣는 것이 가능하다.

let fruit = 'apple';

switch (fruit) {
  case 'banana':
    console.log('This is a banana.');
    break;
  case 'apple':
    console.log('This is an apple.');
    break;
  case 'orange':
    console.log('This is an orange.');
    break;
  default:
    console.log('Unknown fruit.');
}

fruit 의 값이 어떤거면 ~ 저런 문구를 실행해 이렇게 말이다.

그런데 잘 안쓴다고 한다.

내 생각에도 차라리 딕셔너리 형태로 저장해두고 시키는게 오천배 나을듯

반복문

반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 시행한다.

대표적인 반복문은 3개로 for , while , do while 문이 존재한다.

세 개 말고도 더 많다고 하는데 그것은 다음 챕터들에 나올 내용이니 일단 넘어가자고 한다.

for 문

for (반복문에 쓰일 변수 선언문 ; 조건식 ; 증감식){
  조건식이 true 일 때 실행할 코드
}

이런식으로 사용 가능하다.

for (let i = 1; i < 10; i++) {
  if (i % 2) {
    console.log(i, '홀수 입니다');
  } else {
    console.log(i, '짝수 입니다.');
  }
}

슈류륙

while 문

let i = 1;
while (i < 10) {
  if (i % 2) {
    console.log(i, '홀수입니다');
  } else {
    console.log(i, '짝수입니다');
  }
  i++;
}

얘도 이렇게 사용하거나 중간에 break 문을 이용해서 탈출 할 수도 있다.

do while 문

신기하다 별게 다있네

do .. while 문은 코드 블록을 먼저 실행하고 조건식을 평가한다.

let i = 1;

do {
  console.log(i);
  i++;
} while (i < 5);

while 문 안에 들어갈 내용을 빼서 do 안으로 빼주자

그러면 while 문이 실행되지 않더라도 do 내부에 있는 코드가 우선적으로 실행된다.

break 문

break 문은 코드 블록을 탈출한다. 엄밀히 말하면 반복문이나 레이블 문을 탈출한다.

레이블문 ?

레이블문은 식별자가 붙은 문을 말한다.

hi: {
  console.log(1);
  break hi;
  console.log(2);
}

라는 코드가 있다면 해당 코드 블록을 hi 라는 식별자로 이름을 붙어둔 것이다.
코드블록 내부의 hibreak 하라는 제어문을 통해 해당 코드 블록에서 벗어난다.

doubleFor: for (let i = 1; i < 7; i++) {
  for (let j = 1; j < 7; j++) {
    if (i + j > 4) {
      console.log(i, j);
    }
  }
}

만약 두 주사위 눈의 합이 5 이상인 것을 출력하는 코드가 있을 때

하나라도 5 이상인 것을 발견하면 이중 반복문을 멈추고 싶다고 해보자

그러면 그냥 저 이중 반복문의 코드 블록이 doubleFor 라는 식별자로 선언 되어 있기 때문에

doubleFor: for (let i = 1; i < 7; i++) {
  for (let j = 1; j < 7; j++) {
    if (i + j > 4) {
      console.log(i, j);
      break doubleFor;
    }
  }
}

이중반복문 전체를 break 해달라고 하면 된다.

만약 일반적인 break 만 썼다면 두 번째 반복문에서만 빠져 나올 수 있다.

레이블문 굿

continue 문

continue 문은 break 문과 비슷하다.

하지만 continue 문은 코드 블록을 탈출 하는 것이 아니라 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동한다.

profile
빨리 가는 유일한 방법은 제대로 가는 것이다

0개의 댓글