⇒ optional chaning연산자 (?.)는 객체 내의 key에 접근할 때 그 참조가 유효한지 아닌지 직접 명시하지 않고도 접근할 수 있는 연산자
⇒ ?. 앞의 평가대상이 만약 nullish ( undefined 또는 null ) 일 경우 평가를 멈추고 undefined를 반환
⇒ 코드를 짜면서 객체내의 값을 접근하는 경우가 종종 있습니다. 하지만 항상 그 key값이 존재하는 경우 보다는 없는 경우도 있음
옵셔널 체이닝은 신식 브라우저에서 작용한다.
?. 을 사용하면 프로퍼티가 없는 객체에 에러 없이 안전하게 접근이 가능하다.
?. : 해당 객체가 undefined 이나 null이면 평가를 멈추고 undefined를 반환한다.
옵셔널체이닝은 존재하지 않아도 괜찮은 대상에만 사용하는 것이 바람직하다.
?.은 연산자가 아닌 특별한 문법 구조체(Sysnatx construct) 이다.
delete와 조합하여 사용 가능하다.
⇒ https://coding-farmer.tistory.com/4
1. if문을 줄여줍니다.
nullish연산자와 함께 쓰면 기본값 주기에 용이합니다.
대괄호 표기법에도 옵셔널 체이닝이 가능합니다.
존재하지 않을 수 있는 메서드를 호출할 때도 유용합니다.
5.배열에도 사용 가능합니다.
존재하지 않아도 괜찮은 대상에만 적용해야합니다. 에러를 피하기 위해서 남용하다가 디버깅이 어려워질 수 있습니다.
?.(optional chaining)앞에 오는 변수는 선언이 되어 있어야합니다.
let user = {}; // 주소 정보가 없는 사용자
console.log( user?.address?.street ); // undefined, 에러가 발생하지 않습니다.
/* ?.은 ?. ‘앞’ 평가 대상에만 동작되고, 확장은 되지 않는다 */
let user1 = null;
console.log( user1?.address ); // undefined
console.log( user1?.address.street ); // undefined
/* user가 null이나 undefined가 아니고 실제 값이 존재하는 경우엔 반드시 user.address 프로퍼티는 있어야 합니다.
그렇지 않으면 user?.address.street의 두 번째 점 연산자에서 에러가 발생 */
let user2 = "null";
console.log( user2?.address ); // undefined
// console.log( user2?.address.street ); // error
console.log( user2.address?.street ); // undefined
모던 자바스크립트로만 봤을 때는 잘 이해가 가지 않았는데, https://coding-farmer.tistory.com/4 블로그를 보고 좀 더 이해하기가 쉬웠다.
우선, 옵셔널 체이닝은 “참조값이 유효한지 판단하기 위한 수단”이라는 것으로 요약할 수 있다.
보통, 옵셔널 체이닝을 사용하기 위한 변수는 객체로 구성되어 있고, 이 객체 안에 해당 키에 대한 참조값이 존재하느냐를 판단한다.
옵셔널 체이닝이 등장하기 이전에는 AND(&&)문을 활용해서 체크를 해줬어야 하는 단점이 있었으나, 옵셔널 체이닝이 이 문제를 해결해주었다.
이것을 사용할 때 주의할 점으로는 실제 변수가 선언됐는지 체크를 해주어야 하며, 브라우저의 상황이 옛날 버전인지 현대 버전인지 체크를 해줘야 할 필요성이 있다 등이 있다.
아직, 옵셔널 체이닝을 개인 프로젝트나 실무에서 사용해본적은 없다. 나중에 기회가 된다면 사용해봐야 겠다.