WeniVooks

검색

JavaScript 에센셜

조건문

1. 조건문

조건문은 주어진 조건이 참(Truthy)인지 거짓(Falsy)인지에 따라 코드의 실행 여부를 결정합니다. 마치 길을 가다가 신호등을 만났을 때, 초록불이면 가고 빨간불이면 멈추는 것과 비슷합니다.

이를 코드로 표현해보면 아래와 같죠. 자바스크립트 문법이 아니라 영어 문법대로 읽어보세요. 초록불을 false로도 바꿔보세요.

let 초록불 = true; if(초록불){ console.log('횡단보도를 건넙니다.'); } else { console.log('기다립니다.'); }

조건문이 왜 필요할까요? 조건문을 사용하면 조건에 따라 다양한 처리를 할 수 있습니다. 예를 들어, 사용자가 로그인했는지 여부에 따라 다른 화면을 보여주거나, 쇼핑몰에서 특정 조건을 만족하는 상품만을 필터링할 때 조건문이 유용합니다.

let loggedIn = true; if (loggedIn) { console.log('환영합니다! 로그인되었습니다.'); // 로그인 화면을 출력하는 로직 } else { console.log('로그인이 필요합니다.'); // 로그인이나 회원가입 화면을 출력하는 로직 }
1.1. if문

다음은 기본적인 if문의 예시입니다.

if (조건식) {
  // 조건을 만족했을 때 실행될 코드
}
if (조건식) {
  // 조건을 만족했을 때 실행될 코드
}
if (true) { console.log('true'); // 이 코드는 항상 실행됩니다. } let test = 5; if (test < 10) { console.log('참입니다!'); // 이 코드는 test가 10보다 작을 때만 실행됩니다. }

중괄호 생략
중괄호 안의 코드가 한 줄 뿐이라면 중괄호를 아래와 같이 생략해서 한 줄로 작성할 수 있습니다.

if (true) console.log('중괄호를 생략했습니다.');
if (true) console.log('중괄호를 생략했습니다.');

하지만 여러 사람이 함께 코드를 읽고 수정할 경우, 가독성을 위해 중괄호를 사용하는 것이 좋습니다. 특히 짧은 코드가 항상 좋은 코드라고 생각하지 않는 것이 좋습니다.

1.2. if - else 문

if문은 조건이 참일 때만 실행되기 때문에, 위 조건이 만족하지 않을 때 실행할 코드가 필요할 때는 else문을 사용합니다. else문은 단독으로 사용할 수 없으며 if문과 함께 사용해야 합니다.

if (조건식) {
  // 조건을 만족했을 때 실행될 코드
} else {
  // 조건을 만족하지 않았을 때 실행될 코드
}
if (조건식) {
  // 조건을 만족했을 때 실행될 코드
} else {
  // 조건을 만족하지 않았을 때 실행될 코드
}
let x = 3; let y = 7; if (x == y) { console.log('x와 y가 같습니다.'); } else { console.log('x와 y가 다릅니다.'); }
1.3. if - else if - else 문

여러 조건을 처리해야 할 때는 else if를 사용하여 다양한 경우를 처리할 수 있습니다. 이는 시험 점수에 따라 등급을 나누는 것과 비슷합니다.

if (조건식1) {
  // 조건식1이 참일 때 실행될 코드
} else if (조건식2) {
  // 조건식2가 참일 때 실행될 코드
} else {
  // 모든 조건이 거짓일 때 실행될 코드
}
if (조건식1) {
  // 조건식1이 참일 때 실행될 코드
} else if (조건식2) {
  // 조건식2가 참일 때 실행될 코드
} else {
  // 모든 조건이 거짓일 때 실행될 코드
}
let score = 72; let grade; if (score > 90) { grade = 'A'; } else if (score > 80) { grade = 'B'; } else if (score > 70) { grade = 'C'; } else if (score > 60) { grade = 'D'; } else { grade = 'F'; } console.log(`당신의 학점은 ${grade}입니다.`);

조건식의 평가 순서는 위에서 아래로 순차적으로 진행됩니다. if문의 조건식이 먼저 평가되고, 이 조건이 거짓인 경우에만 다음 else if문의 조건식의 평가로 넘어갑니다. 참인 조건을 만날 때까지 순차적으로 평가되며, 참인 조건을 만나면 해당 블록의 코드가 실행하고 조건문을 종료합니다. 참인 조건이 없는 경우 else 블록의 코드가 실행됩니다.

2. 삼항 연산자 (Conditional ternary operator)

삼항 연산자는 if-else문을 더 간결하게 표현할 수 있는 조건부 연사자입니다. 주로 간단한 조건식에서 사용되며, 코드를 한 줄로 작성할 수 있습니다.

조건식 ? (조건식이 참일  실행되는 코드) : (조건식이 거짓일  실행되는 코드)
조건식 ? (조건식이 참일  실행되는 코드) : (조건식이 거짓일  실행되는 코드)

조건식이 참이면 콜론(:) 앞의 코드가 실행되고, 조건식이 거짓이면 콜론 뒤의 코드가 실행됩니다. 또한 삼항 연산자는 값으로 사용될 수 있기 때문에 변수에 할당할 수 있습니다.

let item = true ? 'apple' : 'gold'; console.log(item); // apple

if문과 삼항 연산자의 차이

  • 삼항 연산자는 표현식으로 값을 반환하고 변수에 할당할 수 있습니다.
  • if문은 문(statement)으로 코드 블록을 실행하고, 값의 반환은 하지 않습니다.

삼항 연산자는 중첩하여 사용할 수 있으며, 조건에 따라서 다양한 값을 반환할 수 있습니다. 아래 코드는 시험 점수에 따라 학점을 반환하는 코드입니다. if문으로 작성했던 코드와 비교하여 삼항 연산자를 이용하면 코드를 가볍게 만들 수 있습니다. 하지만 삼항 연산자가 여러 조건을 비교하여 중첩될 경우 가독성이 떨어질 수 있습니다.

let score = 85;
let grade =
  score >= 90
    ? 'A'
    : score >= 80
    ? 'B'
    : score >= 70
    ? 'C'
    : score >= 60
    ? 'D'
    : 'F';
 
console.log(`당신의 학점은 ${grade}입니다.`);
let score = 85;
let grade =
  score >= 90
    ? 'A'
    : score >= 80
    ? 'B'
    : score >= 70
    ? 'C'
    : score >= 60
    ? 'D'
    : 'F';
 
console.log(`당신의 학점은 ${grade}입니다.`);

3. switch 문

if-else 조건문 외에도, switch 문을 사용하여 여러 조건에 대한 실행 코드를 작성할 수 있습니다. switch문은 여러 조건을 비교할 때 유용합니다. if-else문과 같이 switch 문도 조건에 따라 코드의 분기가 일어나는 구조입니다.

switch문은 하나의 표현식을 여러 값과 비교하여 실행할 코드를 결정합니다.

switch (표현식) {
  case 값1:
    // 값1에 대한 실행 코드
    break;
  case 값2:
    // 값2에 대한 실행 코드
    break;
  ...
  default:
    // 모든 case에 해당하지 않을 때 실행될 코드
    break;
}
switch (표현식) {
  case 값1:
    // 값1에 대한 실행 코드
    break;
  case 값2:
    // 값2에 대한 실행 코드
    break;
  ...
  default:
    // 모든 case에 해당하지 않을 때 실행될 코드
    break;
}

값의 비교
표현식과 case 값의 비교는 엄격한 비교(일치 연산) 으로 수행됩니다. 따라서 값과 자료형이 일치해야 합니다.

예를 들어, 요일에 따라 다른 메시지를 출력하는 코드를 작성해 보겠습니다.

console.log(new Date().getDay()); // 요일은 숫자로 표현됩니다. switch (new Date().getDay()) { case 1: console.log('월요일입니다.'); case 2: console.log('화요일입니다.'); case 3: console.log('수요일입니다.'); case 4: console.log('목요일입니다.'); case 5: console.log('금요일입니다.'); default: console.log('주말입니다.'); }
3.1. break

break문은 switch문에서 중요한 역할을 합니다. 위의 코드처럼 break가 없다면, 조건이 참인 case 이후 조건 평가 없이 모든 코드를 실행합니다. 이 현상을 fall through라고 합니다. 이를 방지하기 위해 각 case 뒤에 break를 추가해야 합니다. break를 만나면 switch문을 빠져나오게 됩니다. break를 추가하여 코드를 수정해보겠습니다.

let today; switch (new Date().getDay()) { case 1: today = "월요일"; break; case 2: today = "화요일"; break; case 3: today = "수요일"; break; case 4: today = "목요일"; break; case 5: today = "금요일"; break; case 6: case 0: today = "주말"; break; default: today = null; } console.log(today ? `${today}입니다.` : `요일을 찾을 수 없습니다.`);
3.2. default

switch문에는 default문을 추가할 수 있습니다. default문은 모든 case에 해당하지 않을 때 실행됩니다. default는 필수가 아닌 선택사항입니다.

let menu = '아메리카노'; // 메뉴를 바꿔보세요! switch (menu) { case '아메리카노': console.log('아메리카노를 주문했습니다!'); break; case '카페라떼': console.log('카페라떼를 주문했습니다!'); break; case '바닐라라떼': console.log('바닐라라떼를 주문했습니다!'); break; case '콜드브루': console.log('콜드브루를 주문했습니다!'); break; default: console.log('없는 메뉴를 고르셨습니다. 다시 주문해주세요.'); }
6장 코드 제어하기6.2 반복문