논리 연산자를 이용한 단축 평가
논리 연산자 중 논리합과 논리곱 연산자 표현식의 평가 결과는 boolean 타입이 아닐수도 있다.
이걸 true 냐 false 냐를 구분짓는 연산이 아닌 2개의 피연산자 중 어느 한 쪽을 골라 평가한다는 뉘앙스로 봐야한다.
아래 예시를 보자.
논리곱 연산을 행했는데, 결과 값이 boolean 타입이 아닌 2번째 피연산자인 "치킨" 이 나온 것을 확인할 수 있다.
논리곱(&&)연산자는 두 개의 피연산자가 모두 true 일 때 true 를 반환하는 연산자 임을 기억하고 차근차근 풀어나가보자.
첫번째 피연산자인 "라면" 은 Truthy 값으로 true 로 평가된다.
아직 논리곱 연산은 끝나지 않았다. 첫번째 피연산자가 true 인 것을 확인했으니
두번째 피연산자가 true 냐, false 냐가 중요한 것이다.
이미 결과는 두번째 피연산자의 값에 달렸다고 바꿔 말할 수 있다.
두번째 피연산자가 ture 면 true, false 면 false 가 되어버린다.
이럴때 논리곱 연산자는 효율적이게 논리 연산의 결과를 결정할 수 있는 두번째 피연산자를 그대로 반환한다.
언어의 성능적인 측면에서 굉장히 효율적인 처리이다.
굳이 암묵적 타입변환을 한번 더 해서 값을 true / false 로 바꾸지 않아도 되니까 말이다.
자, 그럼 논리합의 경우도 쉽게 예측할 수 있다.
아래 예제를 보자.
논리곱 연산자는 첫번째 피연산자를 반환한다.
논리곱 연산자는 두 개의 피연산자 중 하나만 true 라도 true가 된다.
따라서 첫번째 피연산자가 true 라면 true 이기에 첫번째 연산자를 그대로 반환하는 것이다.
이렇게 논리곱과 논리합 연산자는 결과를 결정하는 피연산자를 타입변환 없이 그대로 반환한다.
이를 "단축 평가" 라고 하는 것이다.
단축평가를 한 줄로 정의해보자면,
표현식을 평가하는 도중 평가 결과가 확정되었을 때 나머지 평가 과정을 생략하는 것
이라 말할 수 있다.
이 단축 평가를 이용했을 때 if 문을 대체할 수 있다.
const a = true;
let message = '';
if (a) message = 'a 는 참';
// 단축 평가 이용
message = a && "a는 참";
조건 값이 false 일때 뭘 해야한다면 논리합이 아닌 논리곱을 이용하면 된다.
추가 Tip!
단축 평가를 객체를 가리키기를 기대하는 변수의 값이 null 또는 undefined 일때 사용하면 에러를 발생시키지 않는다.
이게 무슨 말이냐면,
const a = null;
const v = a.value; // TypeError 발생
// 단축 평가 활용
const a = null;
const v = a && a.value;
직관적인 이해가 되었으리라 생각한다!
'Archive > Develop' 카테고리의 다른 글
[ 모던 자바스크립트 스터디 ] 옵셔널 체이닝 연산자 / null 병합 연산자 (0) | 2022.09.17 |
---|---|
[ TypeScript ] 제네릭(Generics) (0) | 2022.09.15 |
[ 모던 자바스크립트 스터디 ] 암묵적 타입 변환 & 명시적 타입 변환 (0) | 2022.09.14 |
[ Python ] Dictionary , Set Hash 이용해보자 (0) | 2022.09.12 |
[ 모던 자바스크립트 스터디 ] 레이블 문 , 타입 변환과 단축 평가 (0) | 2022.09.12 |