본문 바로가기

개발/javascript

타입 변환과 단축 평가04 - 단축 평가

"타입 변환과 단축 평가"

 

4. 단축 평가

"논리합(||) 연산자와 논리곱(&&) 연산자 표현식의 평가 결과는 불리언 값이 아닐 수도 있다. 논리합(||), 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다."라는 것이다.

'Cat' && 'Dog'	// 'Dog'

 

 

논리곱(&&) 연산자는 두 개의 피연산자가 모두 true로 평가될 때 true를 반환한다. 대부분의 연산자가 그렇듯이 논리곱 연산자도 왼쪽에서 오른쪽으로 평가가 진행된다.

첫 번째 피연산자 'Cat'은 Truthy 값이므로 true로 평가된다. 하지만 이 시점까지는 위 표현식을 평가할 수 없다. 두 번째 피연산자까지 평가해 보아야 위 표현식을 평가할 수 있다. 다시 말해 두 번째 피연산자가 위 논리곱 연산자 표현식의 평가 결과를 결정한다. 이때 논리곱 연산자는 논리 연산의 결과를 결정한 두 번째 피연산자 즉, 문자열'Dog'를 그대로 반환한다.

 

논리합(||) 연산자도 논리곱(&&) 연산자와 동일하게 동작한다.

'Cat' || 'Dog'	// 'Cat'

논리합(||) 연산자는 두개의 피연산자 중 하나만 true로 평가되어도 true를 반환한다. 대부분의 연산자가 그렇듯이 논리합 연산자도 왼쪽에서 오른쪽으로 평가가 진행된다.

첫 번째 피연산자 'Cat'은 Truthy 값이므로 true로 평가된다. 이 시점에 두 번째 피연산자까지 평가해 보지 않아도 위 표현식을 평가할 수 있다. 이때 논리합 연산자는 논리 연산의 결과를 결정한 첫번째 피연산자 즉, 문자열 'Cat'를 그대로 반환한다.

 

논리곱(&&) 연산자와 논리합(||) 연산자는 이와 같이 논리 연산의 결과를 결정한 타입 변환하지 않고 피연산자를 그대로 반환한다. 이를 단축 평가(Short-Circuit evaluation)라 부른다. 단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우, 나머지 평가 과정을 중단하는 것이다. 대부분의 프로그래밍 언어는 단축 평가를 통해 논리 연산을 수행한다.

 

단축 평가는 아래의 규칙을 따른다.

// 논리합(||) 연산자
'Cat' || 'Dog'		// 'Cat'
false || 'Dog'		// 'Dog'
'Cat' || false		// 'Cat'

// 논리곱(&&) 연산자
'Cat' && 'Dog'		// 'Dog'
false && 'Dog'		// false
'Cat' && false		// false

단축 평가를 사용하면 if 문을 대체할 수 있다. 주어진 조건이 Truthy 값(참으로 평가되는 값)일 때 무언가를 해야 한다면 논리곱(&&) 연산자 표현식으로 if 문을 대체할 수 있다.

var done = true;
var message = '';

// 주어진 조건이 true일 때
if (done) message = '완료';

// if 문은 단축 평가로 대체 가능하다.
message = done && '완료';
console.log(message);	// 완료

주어진 조건이 Falsy 값(거짓으로 평가되는 값) 일 때 무언가를 해야 한다면 논리곱(||) 연산자 표현식으로 if 문을 대체할 수 있다.

var done = false;
var message = '';

// 주어진 조건이 false일 때
if (!done) message = '미완료';

// if 문은 단축 평가로 대체 가능하다.
message = done || '미완료'
console.log(message)	// 미완료

참고로 삼항 조건 연산자는 if...else 문을 대체할 수 있다.

var done = true;
var message = '';

// if...else 문
if (done) message = '완료';
else      message = '미완료';
console.log(message);	// 완료

// if...else 문은 삼항 조건 연산자로 대체 가능하다.
message = done ? '완료' : '미완료';
console.log(message);	// 완료