티스토리 뷰

논리 연산자란?

컴퓨터는 논리 연산이라는 과정을 통해 상황을 판단(true인지 false인지 판단)하고 명령을 수행합니다. 이러한 논리 연산에서 사용되는 것이 논리 연산자입니다. 자바스크립트가 지원하는 논리 연산자는 AND(&&), OR(||), NOT(!)이 있습니다. AND를 논리곱, OR을 논리합, NOT을 논리부정이라고 나타내기도 합니다. 

논리연산 진위표

어떤 때에 참이 되고, 어떤 때에 거짓이 되는 지는 표를 보면 쉽게 이해할 수 있습니다.

 x

 y

 x && y

false

false 

false 

false

true 

false 

true 

false 

false 

true 

true 

true 

 AND(&&)연산의 진위표


표를 보시면 x && y 일 때 true 값을 가지는 것은 하나밖에 없습니다. 즉 AND를 쓸 때엔 피연산자(x, y를 뜻합니다.)가 모두 true일 때만 true를 나타냅니다. 한 쪽이라도 false일 경우 false를 반환합니다.


x && y일 경우 피연산자 모두가 true여야 true가 됩니다.


 x

x || y 

false 

false 

false 

false 

true 

true 

true 

false 

true 

true 

true 

true 

 OR(||)연산의 진위표


표에서 x || y일 때 false가 되는 것은 하나밖에 없죠? OR을 쓸 때엔 피연산자 중 하나라도 true면 true가 됩니다. 피연산자가 모두 false여야만 false를 반환합니다.


x || y일 경우 피연산자가 모두 false 일 때만 false 값을 가집니다. 


!x 

false

true 

true 

false 

NOT(!)연산의 진위표 


NOT 연산자는 값을 반대로 바꿉니다.


false일 경우엔 true로, true일 경우 false로 바꾸는 것이 !(not)입니다.

단축평가

자바스크립트에서는 단축평가가 일어납니다. x의 값이 false라면 x && y의 값은 y에 상관없이 false를 가지게 됩니다. 이처럼 두 값을 모두 평가하지 않아도 될 때에 단축평가가 일어납니다.

const foo = true;
let bar = 0;
const result = foo || bar++;


소스코드를 살펴볼까요. foo의 값은 true입니다. 그래서 bar의 값과 상관없이 foo || bar의 값은 true입니다. 이럴때 단축평가가 일어난다고 했죠? 단축평가가 일어나면 bar라는 피연산자에 ++라는 부수효과가 붙어있더라도 그 효과는 일어나지 않습니다. bar의 값을 확인해보시면 0이 나오는 것을 볼 수 있습니다.

 

단축평가가 일어나면 확인할 필요가 없는 피연산자에 부수효과가 있더라도 효과가 발생하지 않습니다.


그럼 foo의 값이 false일 경우에는 어떻게 될까요? foo의 값이 false면 bar의 값에 따라 true인지 false인지를 결정할 수 있기 때문에 값을 평가해야합니다. 그러면 result에는 0이라는 값이 담기고, bar의 값이 1 증가합니다.

피연산자가 불리언(true나 false)이 아니면 값이 반환됩니다. 

값이 반환된다는 것이 이해가지 않으실수도 있습니다. 하지만 위에서 result에는 true라는 값이 아니라 0이라는 값이 담겼습니다. 이처럼 피연산자가 불리언 값이 아니면 피연산자의 값이 반환되서 변수에 저장됩니다. 자바스크립트의 모든 값은 true나 false로 나눠진다고 했던 것을 기억하시나요?false를 포함해서 0, NaN,""(빈문자열),undefined, null 등도 false처럼 취급되며 이런 것을 거짓 같은 값(falsy)라고 했었습니다. falsy가 아닌 것은 모두 참 같은 값(truthy)입니다. truthy와 falsy로 진위표를 만들어 보겠습니다.

 x

x && y 

falsy 

falsy 

x(falsy) 

falsy 

truthy 

x(falsy) 

truthy 

falsy 

y(falsy)

truthy 

truthy 

y(truthy) 


 x

x || y 

falsy 

falsy 

y(falsy) 

falsy 

truthy 

y(truthy) 

truthy 

falsy 

x(truthy) 

truthy 

truthy 

x(truthy) 


표가 이해가 되지 않으시면 단축평가부분을 더 공부하시는 것을 추천드립니다. 결과를 결정한 값이 반환됩니다.


NOT(!)은 불리언이 아닌 값을 반환할 수 없으므로 피연산자가 무엇이든 항상 불리언(true나 false)를 반환합니다. 



논리연산자에 대해서 적다보니 포스팅이 많이 길어졌습니다. 이해가 되지 않는 부분이 있으시면 댓글에 적어주세요.



공감은 제작자에게 큰 힘이 됩니다.




댓글