본문 바로가기
javascript/자바스크립트는 왜 그 모양일까

불(boolean) 타입

by yongfront 2024. 3. 5.
반응형
SMALL

자바스크립트에서 boolean 타입은 논리적 값을 표현하는데 사용되며, **true**와 false 두 가지 값만을 가질 수 있습니다. 이는 조건문, 제어 흐름, 논리 연산 등에서 중요한 역할을 합니다. boolean 타입은 간단하지만, 자바스크립트에서 데이터의 논리적 상태를 표현하고, 프로그램의 결정을 내리는 데 필수적입니다.

Boolean 타입의 사용

boolean 값은 직접 할당할 수 있으며, 논리 연산자 (&&, ||, !)와 함께 사용되어 복잡한 논리 조건을 구성할 수 있습니다. 또한, 비교 연산자 (==, ===, !=, !==, <, >, <=, >=)의 결과도 boolean 값입니다.

let isReady = true; // 직접 할당
let isFinished = false;

if (isReady) {
  console.log("Ready!");
}

let result = (5 > 3); // 비교 연산의 결과는 boolean 값임
console.log(result); // true 출력

Truthy와 Falsy 값

자바스크립트에서는 boolean 타입이 아닌 값을 조건문에 사용할 수 있습니다. 이때, 모든 값은 "truthy" 또는 "falsy"로 평가됩니다. "Falsy" 값은 조건문에서 **false**로 평가되는 값들을 말하며, 자바스크립트에서는 다음과 같은 값들이 "falsy"로 간주됩니다:

  • false
  • 0 (숫자 0)
  • "" 또는 '' (빈 문자열)
  • null
  • undefined
  • NaN (Not a Number)

이외의 모든 값은 "truthy"로 평가되어 조건문에서 **true**로 간주됩니다. 이러한 특성을 이용하여, 다양한 데이터 타입을 직접적인 논리적 조건으로 사용할 수 있습니다.

if ("hello") {
  console.log("This string is truthy!");
}

if (0) {
  // 이 블록은 실행되지 않음
} else {
  console.log("0 is falsy.");
}

Boolean() 함수

자바스크립트에서는 Boolean() 함수를 사용하여 어떤 값을 명시적으로 boolean 타입으로 변환할 수 있습니다. 이 함수는 위에서 언급한 "truthy"와 "falsy" 규칙을 따릅니다.

console.log(Boolean(0)); // false 출력
console.log(Boolean("hello")); // true 출력

boolean 타입과 관련된 이러한 개념들은 자바스크립트에서 논리적인 결정을 내리고, 프로그램의 흐름을 제어하는 데 핵심적인 역할을 합니다.

자바스크립트의 논리 연산자 (&&, ||, !)는 불리언(boolean) 값과 함께 사용되기 위해 설계되었지만, 실제로는 불리언이 아닌 값을 직접 반환할 수 있는 "불리언이 아닌 척하는" 동작을 합니다. 이러한 특성 때문에, 논리 연산자는 때때로 "불리언이 아닌 척하기의 피해자"로 묘사될 수 있습니다. 이는 자바스크립트에서 논리 연산자들이 단순히 **true**나 **false**를 반환하는 것이 아니라, "Short-circuit" 평가를 통해 특정 연산의 결과값을 직접 반환하기 때문입니다.

Short-Circuit 평가

  • OR (||) 연산자는 왼쪽 피연산자가 "truthy" 값이면 왼쪽 피연산자의 값을 반환합니다. 만약 왼쪽 피연산자가 "falsy"라면, 오른쪽 피연산자의 값을 반환합니다. 이는 OR 연산자가 첫 번째 "truthy" 값을 찾거나, 모두 "falsy"일 경우 마지막 값을 반환하는 방식으로 동작한다는 것을 의미합니다.
  • AND (&&) 연산자는 왼쪽 피연산자가 "falsy" 값이면 왼쪽 피연산자의 값을 반환합니다. 만약 왼쪽 피연산자가 "truthy"라면, 오른쪽 피연산자의 값을 반환합니다. 즉, AND 연산자는 첫 번째 "falsy" 값을 찾거나, 모든 값이 "truthy"일 경우 마지막 값을 반환합니다.
  • NOT (!) 연산자는 피연산자의 불리언 값을 반전시킵니다. "truthy" 값은 **false**로, "falsy" 값은 **true**로 변환됩니다. 이 연산자만이 항상 불리언 타입을 반환합니다.

예시

console.log("Hello" || "World"); // "Hello" 출력
console.log(0 || "Falsy"); // "Falsy" 출력

console.log("Hello" && "World"); // "World" 출력
console.log(0 && "Falsy"); // 0 출력

이러한 동작 방식은 유용할 수 있지만, 개발자가 이러한 특성을 잘 이해하지 못하면 예상치 못한 결과를 초래할 수 있습니다. 예를 들어, 개발자가 논리 연산의 결과가 항상 불리언 타입이라고 잘못 가정하고 코드를 작성하면, 논리 연산자가 실제로는 "truthy"나 "falsy" 값을 반환할 때 문제가 발생할 수 있습니다.

자바스크립트에서 논리 연산자는 그들의 유연성과 유용성 때문에 널리 사용되지만, 이들의 특별한 동작 방식으로 인해 때때로 혼란을 야기할 수 있습니다. 따라서, 논리 연산자를 사용할 때는 이러한 동작 방식을 잘 이해하고 있어야 하며, 코드의 가독성과 명확성을 위해 필요한 경우에는 명시적으로 불리언 타입으로 변환하는 것이 좋습니다.

자바스크립트에서 "truthy"와 "falsy" 값의 개념은 **true**와 false 값과는 구별되는 중요한 개념입니다. 이 차이점을 이해하는 것은 자바스크립트에서 조건문과 논리 연산자를 사용할 때 매우 중요합니다.

True와 False

**true**와 false는 자바스크립트의 불리언(boolean) 타입의 두 가지 리터럴 값입니다. 이들은 논리적인 조건을 평가하는데 사용되며, 명시적으로 조건문이나 비교 연산의 결과로 나타납니다.

Truthy와 Falsy

반면, "truthy"와 "falsy"는 true 또는 **false**로 직접적으로 평가되지 않는 값들이 조건문 내에서 갖게 되는 논리적 성질을 나타냅니다. 자바스크립트에서는 if 조건문이나 논리 연산자 등을 사용할 때, 모든 값은 불리언 컨텍스트에서 "truthy" 또는 "falsy"로 평가됩니다.

  • Truthy 값: 조건문에서 **true**로 평가되는 값입니다. 이는 true 리터럴 이외에도, false, 0, 0, 0n, "", null, undefined, NaN 이외의 모든 값입니다. 즉, 빈 문자열이 아닌 문자열, **0**이 아닌 모든 숫자(음수 및 양수), 빈 배열, 빈 객체 등이 포함됩니다.
  • Falsy 값: 조건문에서 **false**로 평가되는 값입니다. 자바스크립트에서는 명시적으로 false, 0, 0, 0n (BigInt에서의 0), "" (빈 문자열), null, undefined, **NaN**이 "falsy" 값입니다.

예시

if ("hello") {
    console.log("This string is truthy.");
} // 이 코드는 실행됩니다.

if (0) {
    console.log("This code will not execute.");
} // 이 코드는 실행되지 않습니다.

위의 예에서, "hello" 문자열은 "truthy" 값이기 때문에 조건문은 참으로 평가되고 코드 블록이 실행됩니다. 반면, **0**은 "falsy" 값이기 때문에 해당 조건문은 거짓으로 평가되고 코드 블록은 실행되지 않습니다.

"truthy"와 "falsy" 개념은 **true**와 **false**의 불리언 타입 값과는 다르며, 자바스크립트에서 불리언 컨텍스트에서의 값의 평가 방식을 설명합니다. 이러한 차이를 이해하는 것은 조건문의 올바른 사용과 예상치 못한 버그를 방지하는 데 중요합니다.

728x90
반응형
LIST