Categories: JavaScript

JavaScript 논리연산자 (AND, OR, NOT) 단축평가

자바스크립트 논리연산자란?

자바스크립트 논리연산자는 주로 조건문과 논리적인 표현에서 사용되며, 논리적인 조건을 결합하거나 평가하는 데 사용됩니다. 주요 논리 연산자로는 AND(&&), OR(||), NOT(!)이 있습니다.

논리연산자 종류

AND (&&)

AND 연산자는 양쪽 피연산자가 모두 true일 때만 전체 표현식이 true가 됩니다.
한쪽이라도 false라면 false가 됩니다.

JavaScript
true && true //true
true && false //false
false && false //false
false && true //false
JavaScript

OR (||)

OR 연산자는 양쪽 피연산자 중 하나라도 true이면 전체 표현식이 true가 됩니다.
둘 다 false일 때만 false가 됩니다.

JavaScript
true || true //true
true || false //true
false || true //true
false || false //false
JavaScript

NOT (!)

NOT 연산자는 피연산자의 논리값을 반전시킵니다.
true는 false로, false는 true로 변환됩니다.

JavaScript
!true //false
!false //true
!!true //true
!!false //false

!null //true
!(0 === 0) //false
!(3 < 4) //false
JavaScript

논리연산자 단축평가

논리연산자인 AND(&&)와 OR(||)에서의 단축평가는 두 번째 피연산자의 평가를 생략하고도 전체 표현식의 결과를 빠르게 결정할 수 있는 특징입니다. 이는 연산을 최소한으로 수행하여 효율적인 코드를 작성할 수 있게 해줍니다.

AND(&&) 의 단축평가

AND (&&) 연산자는 양쪽 피연산자가 모두 true일 때만 전체 표현식이 true가 됩니다.
왼쪽 피연산자가 false 일 경우에는 오른쪽 피연산자는 볼 것도 없이 전체 표현식이 false 가 되기 때문에 오른쪽 피연산자의 평가를 수행하지 않고 바로 왼쪽 false 를 반환합니다.

JavaScript
let result = false && someFunction();
// someFunction()은 호출되지 않음
JavaScript

OR (||) 의 단축평가

OR (||) 연산자는 양쪽 피연산자 중 하나라도 true 면 전체 표현식이 true가 됩니다.
왼쪽 피연산자가 true 일 경우에는 오른쪽 피연산자는 볼 것도 없이 전체 표현식이 true 가 되기 때문에 오른쪽 피연산자의 평가를 수행하지 않고 바로 왼쪽 true 를 반환합니다.

JavaScript
let result = true || someFunction();
// someFunction()은 호출되지 않음
JavaScript

단축평가는 왜 일어날까?

불필요한 계산을 피해서 프로그램의 성능을 향상 시킬 수 있습니다. 특히, 함수 호출이나 복잡한 연산이 있는 경우, 이러한 단축 평가를 사용하면 성능상 이점이 있습니다.

단축평가 문자열 예시

이 표에서 피연산자1은 왼쪽에 오는 첫 번째 피연산자를 나타내며, 피연산자2는 오른쪽에 오는 두 번째 피연산자를 나타냅니다. 결과 열은 각각의 논리 연산자에 대한 평가 결과를 나타냅니다.
빈 문자열일 경우에는 false 로 평가 되고, 빈 문자열이 아닌 경우에는 true 로 평가 되기 때문에 아래와 같은 결과가 나오게 됩니다.

피연산자1피연산자2AND(&&) 결과OR(||) 결과
“hi”“bye”“bye”“hi”
“hi”“”“”“hi”
“”“bye”“”“bye”
“”“”“”“”
  • AND(&&) 연산자
    • 왼쪽 피연산자가 true 또는 truthy 값일 경우, 오른쪽 피연산자 결과가 반환됩니다.
    • 왼쪽 피연산자가 false 또는 falsy 면 왼쪽 피연산자가 반환됩니다.
  • OR(||) 연산자
    • 왼쪽 피연산자가 false 또는 falsy 값일 경우, 오른쪽 피연산자 결과가 반환됩니다.
    • 왼쪽 피연산자가 true 또는 truthy 면 왼쪽 피연산자가 반환됩니다.

AND(&&) 연산자 단축평가 정리

AND(&&) 연산자단축평가 결과
true && 값
false && 값false
값 && truetrue
값 && falsefalse
값1 && 값2값2

OR(||) 연산자 단축평가 정리

OR(||) 연산자단축평가 결과
true || 값true
false || 값
값 || true
값 || false
값1 || 값2값1

단축평가는 성능 최적화와 관련이 있습니다. 특히, 함수 호출이나 비용이 큰 연산을 피할 수 있습니다. 또한, 단축평가는 코드를 간결하게 만들어 줄 수 있습니다. 하지만 이를 사용할 때 주의해야 할 점은 피연산자의 순서에 따라 결과가 달라질 수 있다는 점입니다.

단축평가 활용

undefined / null 오류 방지

단축평가는 undefined 또는 null 오류를 방지하는 데 도움이 됩니다. 예를 들어, 객체의 속성이 존재하는지 확인할 때, && 연산자를 사용하면 속성이 존재하지 않을 때 undefined 오류를 방지할 수 있습니다.

JavaScript
let 사용자 = { 이름: 'John', 나이: 20 };

let 나이 = 사용자 && 사용자.나이;

console.log(나이); // 출력: 20
JavaScript
  • AND(&&) 연산자를 사용하여 사용자.나이의 값이 존재하는지 확인하고, 값이 존재하면 나이에 할당합니다. 이를 통해 undefined 오류를 방지합니다.

함수 파라미터의 기본값 설정

함수의 파라미터가 주어지지 않거나 undefined인 경우에 기본값을 사용하는 예제입니다.

JavaScript
function greet(name) {
  name = name || "Guest";
  console.log("Hello, " + name + "!");
}

greet(); // "Hello, Guest!"
greet("John"); // "Hello, John!"
JavaScript
  • OR(||) 연산자는 왼쪽 피연산자가 truthy한 값이면 그 값을 반환하고, falsy면 오른쪽 피연산자를 반환합니다.
  • 따라서 name이 주어지지 않거나 falsy한 값일 경우 오른쪽 “Guest”가 할당되어 name 변수가 설정됩니다.
  • 즉 greet()를 호출하면 name이 주어지지 않았으므로 기본값 “Guest”가 사용되어 “Hello, Guest!”가 출력됩니다.
  • 반대로, greet(“John”)를 호출하면 name이 주어졌으므로 전달된 값 “John”이 사용되어 “Hello, John!”이 출력됩니다.

결론

논리연산자는 조건문에서 여러 조건을 조합하거나 표현식을 평가하는 데 사용됩니다. AND, OR, NOT을 적절히 조합하여 복잡한 논리 표현식을 만들 수 있습니다. 이를 통해 프로그램은 다양한 조건에 따라 다르게 동작할 수 있습니다.

suover

Recent Posts

Java 자바 Set – HashSet, TreeSet, LinkedHashSet 정리

소개 자바에서 Set은 중복을 허용하지 않는 데이터 집합을 의미합니다. List와 달리 동일한 요소를 여러 번…

1개월 ago

Java 자바 Hash 해시 제대로 이해하기

해시(Hash)란 무엇인가? 해시(Hash)는 자바 프로그래밍에서 빠르고 효율적인 데이터 저장 및 검색을 위한 핵심적인 개념입니다. 이…

2개월 ago

Java 자바 리스트 (List) 정리

List란 무엇인가? List는 자바 컬렉션 프레임워크의 핵심 인터페이스 중 하나로, 순서가 있는 데이터를 다루는 데…

2개월 ago

Java 자바 LinkedList 동작 원리와 사용법

LinkedList란 무엇인가? LinkedList는 자바에서 유용하게 사용되는 자료구조 중 하나로, 연결 리스트 방식을 이용하여 데이터를 관리하는…

2개월 ago

Java 자바 ArrayList 동작 원리와 사용법

ArrayList란 무엇인가? ArrayList는 자바에서 가장 널리 사용되는 컬렉션 중 하나로, 가변 크기의 배열을 구현한 클래스입니다.…

2개월 ago

Java 자바 제네릭(Generic) 개념과 문법 알아보기

제네릭(Generic)이란? 자바 제네릭은 코드의 재사용성을 높이고 타입 안전성을 보장하는 중요한 개념입니다. 이 블로그 글에서는 자바…

2개월 ago