타입스크립트 3.7이 릴리즈 되면서 새롭게 사용할 수 있게 된 문법 중에 하나가 바로 "옵셔널 체이닝(Optional Chaining)"이다.
null
이나 undefined
인 값이 반환되면, 즉시 중단하고 undefined
를 반환하는 문법이다.
코드가 즉시 중단 되는 것은 꽤 멋진 것이, 보통의 경우, null
이나 undefined
에 접근하여 함수를 실행시키는 경우에는 오류가 발생하지만, 이 경우에는 오류 없이 바로 undefined
를 반환 한다는 것이다.
const apple = garden?.tree.getApple();
위 코드는 아래와 같다.
const apple = (garden === nulll || garden === undefined).tree.getApple();
위의 코드가 헐씬 간결한 것을 알 수 있다.
이제 아래와 같은 코드를 작성하지 않아도 된다.
let apple = null;
if(garden && garden.tree){
apple = garden.tree.getApple();
}
if(apple === null) console.log('apple is null');
위 코드는 아래의 코드로 대치할 수 있다.
const apple = garden?.tree?.getApple();
if(!apple) console.log('apple is undefined!');
오직 null
과 undefined
만이 중단시킬 수 있다는 것은 상당한 이점을 제공한다.
예를 들면 0
, ''
, false
, NaN
과 같은 falsey한 값도 옳바른 경우에는, 기존의 &&
이나 if(apple)
같은 문법으로는 null
또는 undefined
과 구별이 불가능했었다. 하지만 ?.
을 사용하면 이와 같은 경우를 구별 할 수 있게 되는 이점이 있다.
이와 같은 경우는 아래의 예시로 알 수 있다.
initScrollBar(scrollBarY?: number){
this.setScrollBar(scrollBarY || 100);
}
이 경우에는 scrollBarX
가 0
인 경우에는 의도와는 다르게 100
이라는 값이 들어가게 된다. 이런 경우에는 ??
이라는 문법을 사용할 수 있다.
initScrollBar(scrollBarY?: number){
this.setScrollBar(scrollBarY ?? 100);
}
이제 scrollBarY
가 null
이나 undefined
인 경우에만 기본 값으로 100이 들어가게 된다.
요약하자면 다음과 같다.
-
null
과undefined
만을 다른 'falsey'한 값과 구별하기 위해 옵셔널 체이닝 문법이 생겼다. -
null
또는undefined
를 만나면 더 이상 진행하지 않고undefined
를 즉시 반환한다.
'Web Programming > JavaScript & TypeScript' 카테고리의 다른 글
forEach를 사용하면 안되는 경우 (3) | 2020.07.19 |
---|---|
await의 함정, 숨은 병목을 찾자 (1) | 2020.04.28 |
TSLint와 ESLint의 통합 (0) | 2019.04.11 |
ES6로 문자열의 바이트(Byte) 구하기 (0) | 2019.03.23 |
JavaScript array delete item(Array에서 특정 인덱스의 아이템 제거) (0) | 2019.02.23 |