null 병합 연산자란 무엇인가?
C#에서는 값이 null일 경우 대체값을 지정하기 위해 널 병합(null coalescing) 연산자인 ??를 사용합니다. 그렇다면 자바스크립트에도 이와 유사한 연산자가 있을까요? 오랫동안 자바스크립트에서는 논리 OR 연산자인 ||가 이러한 역할을 대신 수행해 왔습니다.
논리 OR 연산자(||)
||는 두 피연산자 중 하나라도 참(truthy)으로 평가되면 조건식 전체가 참이 되는 논리 OR 연산자입니다. 자바스크립트에서는 이 성질을 활용해 변수가 빈 값(0, 빈 문자열, null, undefined 같은 falsy 값)일 때 기본값을 할당하는 패턴으로 널리 사용됩니다.
기본값 지정 예시
var userInput = ""; var value = userInput || "기본값"; // userInput이 빈 문자열이므로 value에는 "기본값"이 저장됨
예제: var와 함께 || 연산자 사용하기
다음은 자바스크립트에서 var 선언과 함께 || 연산자를 사용하는 기본적인 예제입니다.
<html>
<body>
<script>
var a = true;
var b = false;
document.write("(a || b) => ");
result = (a || b);
document.write(result);
</script>
</body>
</html>
위 코드를 실행하면 (a || b) => true가 출력됩니다. a가 true이므로 OR 조건 전체가 참으로 평가되기 때문입니다.
참고: ES2020의 진짜 null 병합 연산자(??)
최신 자바스크립트(ES2020)에는 C#의 널 병합 연산자와 동일한 ?? 연산자가 정식 도입되었습니다. ??는 좌변의 값이 null 또는 undefined일 때만 우변의 값을 반환합니다.
var count = inputValue ?? 0; // inputValue가 null 또는 undefined일 때만 0이 할당됨
||와 ??의 가장 큰 차이는 falsy 값 처리 방식입니다. ||는 0이나 빈 문자열처럼 거짓으로 평가되는 모든 값에 반응하지만, ??는 오직 null과 undefined에만 반응합니다. 따라서 0이나 빈 문자열도 유효한 값으로 취급해야 하는 상황이라면 ??를 사용하는 것이 더 안전하고 의도에 맞는 결과를 얻을 수 있습니다.