사실 논리연산자는 JavaScript에 국한되지 않지만, 때마침 JavaScript 공부중이라 JavaScript로 분류하였음.

(분류 안하면 죽는 병에 걸렸음)

우선 간단하게 JavaScript의 논리연산자에 대해 알아보자.

 

논리연산자

자바스크립트엔 ||(OR), &&(AND), !(NOT) 3가지의 연산자가 존재한다.

|| (OR)

result = a || b;

 

인수 중 하나라도 true이면 true를 반환, 그렇지않으면 false를 반환한다.

  True False
True True True
False True False

 

&& (AND)

result = a && b;

 

두 인수가 모두 참일 때 true 반환, 그렇지않으면 false를 반환한다.

  True False
True True False
False False False

 

! (NOT)

result = !value;

 

인수를 하나만 받으며, 피연산자를 Boolean(True/False) 타입으로 변환 후 그 값의 역을 반환한다.

  True False
  False True

 

 

쇼트서킷

쇼트서킷이란 좌측 피연산자만으로 결과과 확정된 논리연산자의 경우, 우측 피연산자를 확인하지 않는 기능.

한마디로 불필요한 연산을 생략함으로써 성능을 개선하는 연산 방식이다.

true || true; // true
true || false; // true

false && true; // false
false && false; // false

 

- ||(OR)의 경우 좌측 피연산자가 true일 경우 항상 true를 반환.

- 반대로 &&(AND)의 경우 좌측 피연산자가 false일 경우 항상 false를 반환.

이미 결과가 확정된 상황에서 우측 피연산자를 계산하는 것은 얼마나 비효율적인 일인가...

 

JavaScript는 이러한 비효율을 개선하기 위해 쇼트서킷을 지원한다. (JavaScript 뿐만 아니라 대부분의 언어가 쇼트서킷을 지원)

 

 

믿기 함들다면 당장 브라우저 콘솔창을 열어 아래 코드를 입력하여 확인해보자.

true || console.log('test'); // true
console.log('test') || true; // console.log('test') 실행 후 true

false && console.log('test'); // false
console.log('test') && false; // console.log('test') 실행 후 undefined

위 코드가 console.log('test')와 같은 단순한 코드라 실감이 안갈 수 있다.

하지만 만약 console.log('test') 대신 수백 초가 걸리는 함수 혹은 파일입출력 등 시간이 많이 걸리는 작업이라면?

코드의 순서를 바꾸기만 하더라도 수백초의 시간을 절약할 수 있다.

 

정리

||(OR)연산자의 경우 좌측에 true값을, &&(AND) 연산자의 경우 좌측에 false값을 놓자.

수백 초의 시간을 절약할 수도 있다.

+ Recent posts