새소식

반응형
Javascript/Clean Code Series(클린코드)

(JS)클린 코드 시리즈1 - Optional Chaining #?. #옵셔널 체이닝

  • -
반응형

 

javascript

Optional Chaining  #?.  #옵셔널 체이닝

 

개발할때 보통 api에서 데이터를 가져온 후 Object 형식의 useState에서 setState로 데이터를 넣어준 후 보통 아래처럼 데이터를 사용합니다.

    let fireball = user.skill.fireball;

    or

    (<div>{user.skill.fireball}</div>)

근데 만약 여기서 user.skill null이라면 "Uncaught TypeError: Cannot read property 'fireball' of null"
이런 문구의 에러가 발생합니다.

 


여기서 만약 optional chaining을 모른다면

let fireball = user.skill && user.skill.fireball;

or

(<div>{user.skill && user.skill.fireball}</div>)

user.skill.fireball 앞에 user.skill && 을 붙여 유효성 검사를 하고 user.skill이 있다면 user.skill.fireball값을 참조하게 할 것입니다.

사실 user.skill ? user.skill.fireball : '' 이 코드 보다는 깔끔하긴 합니다. 하지만 우리의 optional chaining을 알고 있다면

훨씬 깔끔한 코드를 작성할 수 있습니다.

 

 

반응형

 

optional chaining ?. 이렇게 쓰여지고 각 참조가 null인지 undefined인지 미리 확인하여 줍니다.

let fireball = user.skill?.fireball;

or

(<div>{user.skill?.fireball}</div>)

 

단지 . 앞에 ? 하나 붙이면 Uncaught TypeError 에러를 피할 수 있다니 엄청 훌륭하지 않습니까?!

 


이는 아래의 코드와 기능이 같습니다.

let fireball = ((user.skill === null || user.skill === undefined) ? undefined : user.skill.fireball);

 

 

함수를 호출할때도 optional chaining을 쓸 수 있습니다.

let magicAttack = userSkillTree.Meteor?.();

 

 

만약 ?.을 쓰지 않고 userSkillTree Meteor함수가 없다면 TypeError exception (userSkillTree.Meteor is not a function). 에러가 뜰 것입니다.

 

 

이외 object array를 참조할때도 쓸 수 있습니다.

 

 

let fireSkill = skill?.['fire' + 'Arrow'];

let userItem = inventory?.[3];

 

이정도 예시만 보아도 optional chaining의 쓰임새를 어느정도 파악 하셨으리라 생각됩니다.

다들 optional chaining과 함께 즐거운 클린 코딩 하세요!

 

 

- 참조 -

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.