edubun English

불리언과 비교

5 == "5"는 true지만 5 === "5"는 false입니다. 등호 세 개는 양쪽의 타입이 같은지도 확인합니다.

예나 아니요로 답하는 질문

프로그램은 계속 질문을 합니다. 비밀번호가 충분히 긴가? 목숨이 다 떨어졌나? 오늘이 주말인가? 이런 질문의 답은 둘 중 하나이고, 자바스크립트는 이를 두 불리언 값 true와 false로 나타냅니다. 불리언이라는 이름은 참과 거짓의 대수를 세운 19세기 수학자 조지 불에서 왔습니다. 불리언만으로는 별일이 없어 보여도, 프로그램이 판단을 내릴 수 있는 것은 이 값 덕분입니다. 판단은 다음 단원에서 다룹니다.

비교 연산자

비교는 값 두 개를 받아 불리언 하나를 만듭니다. 가장 많이 쓰는 여섯 가지는 아래와 같습니다. 「같다」는 등호 세 개로 씁니다. 등호 하나는 이미 「값을 저장하라」라는 뜻이기 때문입니다.

연산자질문예결과
===같은가?4 === 4true
!==다른가?4 !== 4false
<작은가?3 < 8true
>큰가?3 > 8false
<=작거나 같은가?8 <= 8true
>=크거나 같은가?7 >= 8false

계산처럼 비교도 식이라서 출력하거나 변수에 저장할 수 있습니다. const isAdult = age >= 18;은 나이에 따라 true나 false를 isAdult에 넣습니다. 불리언을 담는 변수 이름은 is, has, can으로 시작하는 경우가 많은데, 그러면 코드가 질문처럼 읽힙니다.

==가 아니라 ===를 쓰는 이유

자바스크립트에는 등호 두 개 ==도 있는데, 느슨한 같음이라고 합니다. 비교하기 전에 양쪽을 같은 타입으로 바꾸려고 해서 결과를 짐작하기 어렵습니다. 5 == "5"도 true이고 0 == ""도 true입니다. 등호 세 개 ===는 엄격한 같음이라 절대 타입을 바꾸지 않습니다. 타입이 다르면 그냥 false입니다. MDN과 대부분의 코드 작성 지침은 평소에 ===와 !==를 쓰라고 권하고, 이 과정도 처음부터 끝까지 그렇게 씁니다.

console.log(5 === 5);      // true
console.log(5 === "5");    // false
// loose equality, best avoided:
console.log(5 == "5");     // true
console.log("cat" !== "dog"); // true

문자열도 비교할 수 있습니다. ===는 두 문자열의 글자가 대소문자까지 똑같은지 확인하므로 "Yes" === "yes"는 false입니다. <와 >는 글자를 하나씩 문자 코드로 비교하는데, 소문자 낱말끼리는 사전 순서와 비슷합니다. "apple" < "banana"는 true입니다. 이 순서에서는 대문자가 모든 소문자보다 앞이라서 "Zebra" < "apple"도 true입니다.

&&, ||, !로 답 묶기

실제 질문은 여러 부분으로 되어 있는 경우가 많습니다. 놀이기구에 타려면 키가 120 cm 이상이고 나이가 8살 이상이어야 할 수 있습니다. 자바스크립트는 논리 연산자로 불리언 답을 묶습니다. &&(그리고)는 양쪽이 모두 true일 때만 true입니다. ||(또는)는 한쪽이라도 true면 true입니다. !(아님)는 불리언을 뒤집어서 !true는 false입니다.

const height = 130;
const age = 7;
console.log(height >= 120 && age >= 8);   // false
console.log(height >= 120 || age >= 8);   // true
console.log(!(age >= 8));                 // true

풀이 예시. 어떤 날이 주말인지 묻는 식은 day === "Sat" || day === "Sun"입니다. 양쪽에 day ===를 모두 써야 합니다. day === "Sat" || "Sun"은 영어 문장으로는 자연스럽지만 뜻대로 동작하지 않습니다. "Sun"만으로는 비교가 아니기 때문입니다. 비교는 &&와 ||보다 먼저 계산되므로 height >= 120 && age >= 8에는 괄호가 더 필요 없지만, 넣어도 손해는 없습니다.

나중에 만날 개념이 하나 더 있습니다. 자바스크립트는 불리언이 필요한 자리에 다른 값이 오면 몇몇 값을 false로 취급합니다. 이런 거짓 같은 값(falsy)은 false, 0, 빈 문자열 "", null, undefined, NaN입니다. 나머지는 문자열 "0"과 "false"까지 포함해 모두 true로 칩니다.

그리고 && 둘 다 참. 또는 || 하나만 참. 아님 ! 답을 뒤집음.

불리언true 또는 false
===엄격한 같음. 값과 타입이 모두 같음
!==엄격한 다름. 같지 않음
==느슨한 같음. 타입을 먼저 바꿈(쓰지 않기)
&&그리고. 양쪽 모두 true일 때만 true
||또는. 한쪽이라도 true면 true
!아님. true와 false를 뒤집음
거짓 같은 값(falsy)false, 0, "", null, undefined, NaN
  1. 무엇이 출력될까요?
    console.log(7 > 7);
    • true
    • false
  2. 무엇이 출력될까요?
    console.log(7 >= 7);
    • true
    • false
  3. 무엇이 출력될까요?
    console.log(3 === "3");
    • true
    • false
  4. 무엇이 출력될까요?
    console.log(3 == "3");
    • true
    • false
  5. 무엇이 출력될까요?
    console.log(true && false);
    • true
    • false
  6. 무엇이 출력될까요?
    console.log(true || false);
    • true
    • false
  7. 무엇이 출력될까요?
    const x = 12;
    console.log(x > 10 && x < 20);
    • true
    • false
  8. 무엇이 출력될까요?
    console.log(!(5 > 2));
    • true
    • false
  9. 무엇이 출력될까요?
    console.log("Yes" === "yes");
    • true
    • false
  10. 무엇이 출력될까요?
    console.log("apple" < "banana");
    • true
    • false
  11. 거짓 같은 값(falsy)은?
    • "0"
    • 0
    • "false"
  12. day가 "Sat"이나 "Sun"인지 바르게 묻는 식은?
    • day === "Sat" || "Sun"
    • day === "Sat" || day === "Sun"
    • day === "Sat" && day === "Sun"
핵심 정리
  • 비교의 결과는 true나 false입니다.
  • ===와 !==를 씁니다. ==는 타입을 바꿔서 헷갈리게 합니다.
  • &&는 둘 다, ||는 하나만 참이면 되고, !는 뒤집습니다.
  • ||와 && 양쪽에는 비교를 각각 완전히 씁니다.
  • falsy 값: false, 0, "", null, undefined, NaN.