불 대수

일상적인 논리를 수학적으로 표현한 것
일반적으로 수학의 값은 숫자를 사용하지만 불 대수에서 사용하는 값들은 진리값
진리값은 어떤 명제가 참인지, 거짓인지를 나타내는 것이라 값이 true, false 두 가지

불대수의 연산

세 가지 연산 : AND OR NOT

불 대수를 정확히 하려면 명제가 뭔지 알아야 하는데 명제란 True or False가 확실한 문장 을 말한다.

ex)
대한민국의 수도는 서울이다. - 참
3은 1보다 작다. - 거짓
한국의 수도는 어디입니까? - 명제가 아님 (질문이기 때문에)
아메리카노가 라떼보다 맛있다. - 명제가 아님(명확하게 참 거짓 판단할 수 X 주관적인 것)

And 연산

x라는 명제가 있고 y라는 명제가 있으면 and 연산은 두 명제가 모두 참인지를 확인한다. 두 명제중 하나라도 거짓이라면 x AND y는 거짓이 된다.

ex)
대한민국의 수도는 서울이다. AND 2는 1보다 크다. -> 둘 다 true -- true
대한민국의 수도는 서울이다. AND 2는 1보다 작다. -> 뒤 명제가 false -- false

OR 연산

or 연산은 두 명제 중 하나라도 참이 있는지를 확인한다. 둘 다 false여야 false가 출력된다.

ex)
대한민국의 수도는 부산이다. OR 대한민국의 수도는 서울이다. -> 앞 명제는 false지만 뒤 명제가 true -- true
대한민국의 수도는 제주도다. OR 대한민국의 수도는 부산이다. -> 둘 다 거짓 -- false

NOT 연산

not 연산은 그냥 반대로 뒤집어주는 역할을 한다. 참이면 거짓으로 만들어 주고, 거짓이면 참으로 만들어 준다.

ex)
NOT 대한민국의 수도는 서울이다. == 대한민국의 수도는 서울이 아니다. --> NOT true -- false
NOT 2는 1보다 작다. == 2는 1보다 작지 않다. --> NOT false -- true

Boolean

Javascript에서 참과 거짓을 표현하는 자료형을 boolean(불린)이라고 한다. 불린의 두 값은 모두 소문자로 true와 false임.

예시

console.log(2>1); 
console.log(2<1); 
console.log(3>=2);
console.log(3<=3);
console.log(3===3); // === 값이 '서로 일치한다' 라는 의미.
console.log(3!==3); // !== '불일치'를 의미. (!가 부정의 의미를 가지고 있다고 생각)

console.log(2>1);   --> 2는 1보다 크다.              --true
console.log(2<1);   --> 2는 1보다 작다.              --false
console.log(3>=2);   --> 3은 2보다 크거나 같다.   --true
console.log(3<=3);   --> 3은 3보다 작거나 같다.   --true
console.log(3===3); --> 3은 3과 값이 일치한다.   --true
console.log(3!==3);  --> 3은 3과 일치하지 않는다. --false

console.log('Chloe' === 'Chloe');
console.log('Chloe' !== 'Chloee');

console.log('Chloe' === 'Chloe'); --> Chloe는 Chloe와 같다. -- true
console.log('Chloe' !== 'Chloee'); --> Chloe는 Chloee와 같지 않다. -- true

and 연산 (&&)

console.log(true && true); //true
console.log(true && false); //false
console.log(false && true); //false
console.log(false && false); //false

두 값이 모두 true 일 때만 true가 출력됨.

or 연산 (||)

console.log(true || true); //true
console.log(true || false); //true
console.log(false || true); //true
console.log(false || false); //false

한 쪽만 true여도 true가 출력됨.

not 연산(!)

console.log(!true); //false
console.log(!false); //true
console.log(!!true); //true
console.log(!!false); //false

작성한 값의 반대값이 출력됨.

Boolean형 연습

// 불린 (Boolean)
console.log(2 < 1 && 'Chloe' !== 'Chloe');

2 < 1는 false고, 'Chloe' !== 'Chloe'도 false이기 때문에 이 코드는 false && false가 되어서 실행했을 때 false가 출력된다. 그런데 사실, AND연산을 할 때 왼쪽이 false일 경우 오른쪽은 볼 필요도 없이 결과가 false이다. AND연산은 양쪽이 모두 true인 경우에만 true가 리턴되기 때문에! 그래서 불린 연산자가 하나만 있을 때는 연산자를 기준으로 왼쪽부터 순서대로 확인하면 된다.

// 불린 (Boolean)
console.log(7 !== 7 || 4 < 3);

이번에는 OR 연산. OR연산의 경우에는 AND연산과 반대로 왼쪽이 true라면, 오른쪽은 안 봐도 결과가 true가 된다. 그런데 OR연산의 왼쪽, 7 !== 7이 false이기 때문에 오른편도 확인해야 한다. 4 < 3은 false이기 때문에 결과적으로 위 연산은 false OR false가 돼서 코드를 실행해보면 false가 출력된다.

마지막으로

// 불린 (Boolean)
let x = 3;
console.log(x > 4 || !(x > 2));

이번에는 변수까지 활용해서 첫 번째 x라는 변수에 3이라는 값을 저장했다.
순서대로 왼쪽의 비교연산부터 정리해 보자. 먼저 변수 x를 3으로 수정했다.

console.log(3 > 4 || !(3 > 2));

3>4는 false이기 때문에 오른쪽도 살펴봐야 한다. !(3>2)에서 3>2는 true이고 그렇게 되면 !(true)이기 때문에 결과적으론 false를 가진다. false || false이기 때문에 false가 출력된다.

문제

Q1) 다음 중 결과가 false 인 경우를 모두 선택하세요.

① false || 4<2
② true && !false
③ '서울' !== "서울"
④ !!false

A)

(1) 4 < 2 는 false.
1번 선택지를 다시 정리하면 false || false 이기 때문에 결과는 false.

(2) ! 는 NOT연산자
2번 선택지를 다시 정리하면 true && true 이기 때문에 결과는 true.

(3) 문자열을 만들 때는 따옴표의 모양이 달라도 같은 문자열.
작은따옴표로 감싼 '서울' 과 큰따옴표로 감싼 "서울" 은 서로 일치한다.
따라서 3번 선택지의 결과는 false.

(4) NOT연산자는 중복이 가능.
4번 선택지에서 NOT연산자를 한 번만 연산하면, !true가 되는데 두 번째 NOT연산도 수행하면, 결국 false가 된다.

답: 1, 3, 4

Q2) 다음 코드를 읽고 결과가 true인 경우를 모두 선택하세요.

let x = 4;
let y = false;
let z = 'c';

① x > 5 && 'chloe' === 'chloe'
② y || !y
③ 'chloe' !== z + 'hloe'
④ x < 4 || !(y === true)

(1) 변수 x 는 4라는 숫자 값을 가지고 있다. 일단 x에 4를 대입해보면, 4 > 5 && 'chloe' === 'chloe' 가 됨. AND연산자(&&)를 기준으로 왼쪽 오른쪽 비교 값들을 다시 정리했을 때 4 > 5 는 거짓(false)이고, 'chloe' === 'chloe'는 참.
결국 false && true 니까 결과는 false. 사실 왼편의 4 > 5부분만 확인해도 이 연산의 결과는 false인걸 확신할 수 있다.

(2) 변수 y는 false라는 불린 값을 가지고 있다. y를 식에 대입하면 false || !false. OR연산자 오른쪽의 !false 를 정리하면, 결국 false || true가 돼서 결과는 true.

(3) 변수 z는 'c'라는 문자열 값을 가지고 있다. c를 식에 대입해보면 'chloe' !== 'c' + 'hloe'이 되는데요. 문자열끼리 더하기연산을 하면 문자열 연결이 이뤄지니깐, 'chloe' !== 'chloe' 이기 때문에 결과는 false.

(4) 천천히 순선대로 하나씩 보면, 왼편의 x < 4는 4 < 4가 되니깐 false. 괄호 안의 비교 연산을 먼저 확인해 보자. y === true는 false === true가 되니깐 false. 이 부분을 다시 정리하면 false || !(false)가 된다. 그리고나서 NOT연산을 정리하면 결과적으로 false || true라는 식이 완성. 그래서 이 식의 결과는 true.

답: 2, 4

profile
front-end developer

0개의 댓글