240801 옵셔널 체이닝

신한별·2024년 8월 1일

💪 매일 기록

목록 보기
34/97

옵셔널 체이닝 (Optional Chaining)

안전하게 프로퍼티에 접근하는 방법 중 하나
일반적인 객체 프로퍼티 접근법(점 표기법) 과 달리 옵셔널 체이닝 연산자(?.)를 통해 접근


function printDogName(user) {
  console.log(user.dog.name);
}

const user1 = {
  name: '존',
  dog: {
    name: '초코',
    breed: '치와와',
  }
}

printDogName(user1); // 초코

보통 이런식으로 중첩된 객체의 프로퍼티에 접근하게 된다.

const user2 = {
  name: '명수',
}

console.log(user2.dog); // undefined
printDogName(user2); // TypeError: Cannot read property 'name' of undefined

하지만 객체 내에 찾는 프로퍼티가 없는 경우가 있다.
dog 프로퍼티가 없는 (undefined) user2 이기 때문에, user2.dog.name 에 접근하려고 하면 💥에러가 발생한다.

이런식으로 중첩된 객체의 프로퍼티를 다룰 때는 user.dog.name에 접근하기 전에
아래 코드와 같이 user.dog이 null 혹은 undefined가 아니라는 것을 검증 하고 접근해야 에러를 방지할 수가 있다.

function printDogName(user) {
  console.log(user.dog && user.dog.name);
}

하지만, 객체의 이름이나 프로퍼티의 이름이 길어질수록 가독성이 나빠지는 문제가 발생하게 된다.

💡 이런 경우 코드를 간결하게 사용할 수 있는 문법이 옵셔널 체이닝(Optional Chaining)

function printDogName(user) {
  console.log(user.dog?.name);
}

옵셔널 체이닝 연산자(?.)
물음표?와 마침표.를 붙여 사용한다.
연산자 왼편의 프로퍼티 값이 undefined 또는 null이 아니라면 그다음 프로퍼티 값을 리턴, 그렇지 않은 경우에는 undefined를 반환하는 문법

이 동작 원리를 삼항 연산자를 통해 표현하면 다음과 같다.

function printDogName(user) {
  console.log((user.dog === null || user.dog === undefined) ? undefined : user.dog.name);
}

0개의 댓글