⚙️ 제어문

2ㅣ2ㅣ·2024년 3월 24일

JavaScript

목록 보기
6/14
post-thumbnail

일반적으로 코드는 위에서 아래로 순차적으로 진행된다.
그렇다면 특정 기능을 구현하기 위해 코드의 흐름을 바꾸려면 어떻게 해야할까?
코드의 흐름을 제어하는 제어문에 대해 알아보겠다 🚗 💨 💨

📌 조건문(Conditional statement)

조건문은 특정 조건에 따라 다른 코드를 실행하게 한다.
조건식의 평가 결과에 따라 블록문의 실행을 결정하는데, 이때 조건식은 불리언 값으로 평가될 수 있는 표현식이다.
가장 일반적인 조건문에는 if...else, 삼항연산자, 그리고 switch문이 있다.

if...else문

조건이 참(True)인지 거짓(False)인지에 따라 다른 작업을 수행한다. 가장 기본적인 조건문 형태다.

let score = 90;
if (score >= 80) {
    console.log("합격입니다!");
} else {
    console.log("불합격입니다ㅠㅠ");
}

score >= 80 가 조건식에 해당하는 부분으로 score = 90 이므로 조건식이 True가 되어 '합격입니다!'가 출력된다.
만약 조건식을 추가하고 싶다면 else if(조건식) 을 사용하여 좀 더 정교하게 코드를 작성할 수 있다.

삼항연산자

조건 ? 표현식1 : 표현식2 형태로, 조건이 참이면 표현식1을, 거짓이면 표현식2를 실행한다. 간단한 조건 판단에 유용하다.
위의 코드를 삼항 연산자로 간단하게 나타내보았다.

let score=90;
result = score >= 80? '합격입니다!' : '불합격입니다ㅠㅠ';
console.log(result);

switch 문

switch문은 하나의 조건에 대해 여러 경우의 값(case)를 비교할 때 사용한다.
각 case는 특정 값에 따라 실행될 코드 블록을 정의한다.
만약 switch문의 표현식과 일치하는 case문이 없다면 실행 순서는 default문으로 이동한다.

let grade = 'A';
let result;
switch (grade) {
    case 'A': result = "우수";
        break;
    case 'B': result = "양호";
        break;
    default: result = "미정";
}
console.log(result);

default문에서는 break를 생략하는 것이 일반적이지만 위의 case문의 같은 경우 break를 생략하면 계속해서 다음 case문으로 이동하므로 각 case마다 break문을 작성해야 한다.

두 반복문의 차이를 명확히 이해하기 위한 예제 코드이다.
node에서 실행해보길 바란다.

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout,
});

readline.question(
  '주문할 음료를 선택하세요 (1)아메리카노 (2)카페라테 (3)티 (4)베이커리 : ',
  (menu) => {
    let orderOptions;
    const menuNum = parseInt(menu, 10); // readline으로 입력받은 인풋은 문자열 타입이므로 menu를 숫자로 변환
    switch (menuNum) {
      case 1:
      case 2:
      case 3:
        orderOptions = 'Ice, Hot, Add Shot, Add Syrup';
        break;
      case 4:
        orderOptions = 'Cake, Bread, Snack';
        break;
      default:
        console.log('주문을 확인해주세요.');
        readline.close();
        return;
    }

    console.log(`선택하신 메뉴: ${menuNum}, 가능한 옵션: ${orderOptions}`);
    readline.question('메뉴의 옵션을 선택하세요: ', (option) => {
      const lowerOption = option.toLowerCase();
      if (
        (menuNum === 1 || menuNum === 2 || menuNum === 3) &&
        (lowerOption === 'ice' ||
          lowerOption === 'hot' ||
          lowerOption === 'add shot' ||
          lowerOption === 'add syrup')
      ) {
        console.log(`${menuNum}번 음료에 ${option} 옵션을 추가합니다.`);
      } else if (
        menuNum === 4 &&
        (lowerOption === 'cake' ||
          lowerOption === 'bread' ||
          lowerOption === 'snack')
      ) {
        console.log(`선택하신 베이커리: ${option}`);
      } else {
        console.log('옵션 선택 없이 주문으로 넘어갑니다.');
      }
      readline.close();
    });
  }
);

🧘🏻‍♀️ 조건문 정리

if...else문은 가장 기본적인 조건문 형태이며 이를 삼항연산자로 간단하게 표현할 수 있다. 참, 거짓으로 실행할 코드를 결정할 때는 if...else문을 사용하고, 참 거짓보다는 다양한 상황(case)에 따라 실행할 코드 블록을 결정할때는 switch문을 사용한다는 것을 알아보았다.

📌 반복문

반복문은 조건이 참인 동안 코드 블록을 반복하여 실행한다. for, while, do...while, break, continue가 여기에 속한다.

for문

가장 일반적인 반복문 형태이다. 정해진 횟수만큼 반복할 때 사용한다. 초기화, 조건 검사, 반복 후 작업(증감 등)을 한 문장으로 작성한다.

for (let i = 0; i < 5; i++) {
    console.log(`Number ${i}`);
}

while문

조건이 참인 동안 계속해서 코드 블록을 실행한다. 조건이 더 이상 참이 아니면 반복이 중지된다. for문과 달리 반복 횟수가 불명확할때 사용한다.

let i = 0;
while (i < 5) {
    console.log(`Number ${i}`);
    i++;
}

do...while문

최소 한 번 코드 블록을 실행한 후, 조건을 검사하여 추가 실행 여부를 결정한다. while문과 비슷하지만, 최소 한 번은 무조건 실행된다.

let i = 0;
do {	//일단 실행된다
    console.log(`Number ${i}`);
    i++;
} while (i > 5); 	//조건식이 False임에도

break문과 continue문

break문은 반복문, swtich문,레이블문을 탈출하여 실행을 중단시킨다. 불필요한 반복을 막을 수 있다. 앞서 말한 3가지 문 이외에 break문을 사용하면 SyntaxError가 발생한다.

continue문은 현재 반복을 건너뛰고 다음 반복으로 넘어간다. 특정 조건에서 반복을 제어할 때 유용하다.

break나 continue에 식별자를 함께 사용하는 것을 레이블문이라고 한다.
레이블문을 사용하면 복잡한 반복문이나 중첩된 반복문 내에서 코드의 흐름을 더 세밀하게 제어할 수 있다.

outer: for (let i = 0; i < 5; i++) { //outer: 식별자
  for (let j = 0; j < 5; j++) {
    if (i + j === 3) break outer;
    console.log(`inner [${i}, ${j}]`);
  }
}
console.log('Done!');

🧘🏻‍♀️반복문 정리

반복문은 조건이 참인 동안 주어진 작업을 반복적으로 실행하도록 하는 프로그래밍 구조이다. for문은 정해진 횟수만큼 반복할 때, while문은 반복 횟수가 불명확하거나 조건에 따라 반복을 계속할 때, 그리고 do...while문은 적어도 한 번은 반드시 실행되어야 할 때 사용한다. break문continue문을 이용해 반복문의 실행 흐름을 제어할 수 있으며, 복잡한 반복문이나 중첩된 반복문의 제어에 유용하게 사용되는 레이블문을 통해 더 세밀한 제어가 가능하다.

profile
https://sususoo.tistory.com/

0개의 댓글