프로그래밍/Js

[es6] 단축평가 예제 (short-circuit evaluation)

소행성왕자 2024. 8. 26. 17:54
acc[curr] = (acc[curr] || 0) + 1;

JavaScript의 논리 연산자(||)의 특성을 활용한 매우 간결하고 효과적인 패턴입니다.

이를 "단축 평가(short-circuit evaluation)"라고 부르기도 합니다.

이 패턴의 작동 원리를 더 자세히 설명해 드리겠습니다:

  1. 논리 OR 연산자(||)의 특성:
    • JavaScript에서 ||는 왼쪽 피연산자가 truthy면 왼쪽 피연산자를 반환합니다.
    • 왼쪽 피연산자가 falsy면 오른쪽 피연산자를 반환합니다.
  2. Falsy 값:
    • JavaScript에서 falsy 값은 false, 0, '', null, undefined, NaN입니다.
    • 객체의 존재하지 않는 속성에 접근하면 undefined를 반환합니다.
  3. 이 패턴의 동작:
    • acc[curr]가 존재하면(즉, 0이 아닌 양수), 그 값을 사용합니다.
    • acc[curr]가 undefined(아직 카운트되지 않은 경우)이면, 0을 사용합니다.

이 패턴은 다음과 같은 if-else 문을 대체합니다:

if (acc[curr] !== undefined) {
    acc[curr] = acc[curr] + 1;
} else {
    acc[curr] = 0 + 1;
}

이 패턴의 장점:

  1. 코드 간결성: 여러 줄의 코드를 한 줄로 압축
  2. 가독성: 익숙해지면 의도를 빠르게 파악 가능
  3. 성능: 조건문 없이 동작하므로 약간의 성능 이점

이러한 패턴은 JavaScript에서 자주 사용되며, 특히 객체의 속성을 안전하게 접근하거나 기본값을 설정할 때 유용합니다. 처음에는 낯설 수 있지만, JavaScript 개발에서 자주 마주치게 되는 관용적인 표현 중 하나입니다.