JavaScript

[JS] 08. 조건문 쓰기: Truthy/Falsy & 단락 평가

MuscleDeveloper5683 2026. 5. 3. 18:50
728x90
SMALL

1. Truthy & Falsy (참 같은 값, 거짓 같은 값)

자바스크립트는 불리언(true, false) 타입이 아니더라도, 조건문 내에서 참이나 거짓으로 평가되는 고유한 규칙이 있다.

① Falsy (거짓 같은 값)

아래의 값들은 조건문에서 false로 인식된다. 딱 7가지만 기억해보자

  • undefined
  • null
  • 0 (숫자 0)
  • -0
  • 0n (BigInt)
  • "" (빈 문자열)
  • NaN (Not a Number)

② Truthy (참 같은 값)

위의 Falsy 값들을 제외한 나머지 모든 값은 true로 평가된다.

  • "0" (내용이 있는 문자열)
  • [] (빈 배열)
  • {} (빈 객체)
  • Infinity (무한대)
 
JavaScript
 
// Truthy & Falsy 확인 예제
function check(value) {
    if (value) {
        console.log(`${value} -> [Truthy] 참입니다.`);
    } else {
        console.log(`${value} -> [Falsy] 거짓입니다.`);
    }
}

check(null);      // Falsy
check(0);         // Falsy
check("SinYoung"); // Truthy
check([]);        // Truthy (빈 배열도 참!)

2. 단락 평가 (Short-circuit Evaluation)

논리 연산자(&&, ||)의 특성을 이용해 조건문을 짧게 줄이는 기술이다. 불필요한 연산을 생략한다고 해서 '단락(Short-circuit)' 평가라고 부른다.

① && (AND) 연산자

  • 앞의 값이 Falsy이면 즉시 그 값을 반환하고 종료한다.
  • 앞의 값이 Truthy이면 뒤의 값을 확인(반환)한다.
 
JavaScript
 
// 예: 데이터가 있을 때만 실행하기
function getName(person) {
    return person && person.name; // person이 null이면 null 반환, 있으면 name 반환
}

console.log(getName({ name: "Dexta" })); // "Dexta"
console.log(getName(null));             // null (에러 방지!)

② || (OR) 연산자

  • 앞의 값이 Truthy이면 즉시 그 값을 반환하고 종료한다.
  • 앞의 값이 Falsy이면 뒤의 값을 확인(반환)한다.
 
JavaScript
 
// 예: 기본값 설정하기
function getNickname(nick) {
    return nick || "익명 사용자";
}

console.log(getNickname("Muscle")); // "Muscle"
console.log(getNickname(""));       // "익명 사용자" (빈 문자열은 Falsy이므로)

3. 실전 응용: 복합 조건 처리

현대 자바스크립트에서는 if문을 남발하기보다 단락 평가를 섞어 쓰는 것이 관례이다.

JavaScript
 
// [심화 예제: 사용자 권한 체크 시스템]

const user = {
    isLoggedIn: true,
    profile: {
        nickname: "SinYoung",
        level: 0 // 0은 Falsy임을 주의!
    }
};

// 1. 단락 평가를 활용한 안전한 접근
const userName = user.isLoggedIn && user.profile.nickname;
console.log(`접속 유저: ${userName}`); // SinYoung

// 2. ?? (Null 병합) vs || (OR) 차이 복습
// 만약 level이 0인 경우, ||를 쓰면 'Guest'가 되어버릴 수 있음
const userLevel = user.profile.level ?? "Level 미정"; 
console.log(`유저 레벨: ${userLevel}`); // 0 (정확하게 출력)

// 3. Truthy/Falsy를 활용한 객체 존재 확인
function printProfile(user) {
    if (!user) {
        console.log("유저 정보가 없습니다.");
        return;
    }
    console.log(`${user.profile.nickname}님의 프로필을 출력합니다.`);
}

printProfile(null); // 안전하게 가드(Guard) 처리됨

 

📝 07편 요약 및 마무리

  1. Truthy/Falsy: null, undefined, 0, "" 등은 조건문에서 false로 취급된다는 것을 기억하자.
  2. 단락 평가: &&는 첫 번째 Falsy를, ||는 첫 번째 Truthy를 찾는 여정이다.
  3. 안전성: 단락 평가를 사용하면 객체가 null이거나 undefined일 때 발생하는 참조 에러(Reference Error)를 아주 우아하게 막을 수 있다.

 

 

728x90