Javascript

[JS] "?." ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž (Optional chaining)

Alexim 2022. 8. 3. 23:42

๐Ÿ“— Optional Chaning

?. ์•ž์˜ ํ‰๊ฐ€ ๋Œ€์ƒ์ด undefined๋‚˜ null์ด๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ“— ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

1. ์žˆ์„ ์ˆ˜๋„ ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์กฐํšŒํ•  ๋•Œ

๋ง์ด ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆฌ๊ฒ ์ง€๋งŒ ์˜ต์…”๋„ ์ฒด์ด๋‹์€ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์„ ๋•Œ๋Š” ๊ฐ์ฒด์— ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ "&&" ์—ฐ์‚ฐ์ž๋ฅผ ์ผ๋‹ค. 

 

let user = {};

user ๊ฐ์ฒด ์•ˆ์—์„œ user.address.street ์„ ์กฐํšŒํ•˜์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์ฃผ์†Œ ์ •๋ณด๊ฐ€ ์—†๋Š” user๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ

๊ทธ๋ƒฅ ์กฐํšŒํ•œ๋‹ค๋ฉด ๋ฐ”๋กœ ํƒ€์ž…์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ 

console.log(user && user.address && user.address.street);

์ด๋Ÿฐ ์‹์œผ๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ผ๋‹ค.

 

์˜ต์…”๋„ ์ฒด์ด๋‹์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ๋‚˜์„œ๋Š”

console.log(user?.address?.street);

์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜์—ˆ๋‹ค. ์˜ต์…”๋„ ์ฒด์ด๋‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ํƒ€์ž…์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


1-2. 

๋‚˜์˜ ๊ฒฝ์šฐ api ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์‚ฌ์šฉํ–ˆ๋‹ค. (ํŠœํ† ๋ฆฌ์–ผ ๋ณด๋Š”์ค‘..)

        <img
          src={channelIcon?.url} // ? ์ด ๋ฌผ์Œํ‘œ ๋ญ์ง€
          alt='channel img'
        />

channelIcon์ด api์—์„œ ๋ถˆ๋Ÿฌ์˜จ ๊ฐ’์ด๊ณ  ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™๋‹ค. 

(ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์ € ๋ฌผ์Œํ‘œ๋ฅผ ๋ดค์„ ๋•Œ ์˜คํƒ€์ธ์ค„ใ…Žใ…Ž)


2. ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ (ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ)

let result = someInterface.customMethod?.();

๋งŒ์•ฝ ์†์„ฑ์— ํ•ด๋‹น ์ด๋ฆ„์ด ์žˆ์ง€๋งŒ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ?. ์˜ ์‚ฌ์šฉ์€ ์—ฌ์ „ํžˆ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์˜ต์…”๋„ ์ฒด์ด๋‹์€ ?. ์ด์ „ ๋ถ€๋ถ„๋งŒ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ € ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ someInterface ์ž์ฒด๋Š” null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ null ๋˜๋Š” undefined ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด

someInterface?.customMethod?.();

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

https://ko.javascript.info/optional-chaining

 

์˜ต์…”๋„ ์ฒด์ด๋‹ '?.'

 

ko.javascript.info

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

 

Optional chaining - JavaScript | MDN

optional chaining ์—ฐ์‚ฐ์ž (?.) ๋Š” ์ฒด์ธ์˜ ๊ฐ ์ฐธ์กฐ๊ฐ€ ์œ ํšจํ•œ์ง€ ๋ช…์‹œ์ ์œผ๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ณ , ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด ์ฒด์ธ ๋‚ด์— ๊นŠ์ˆ™์ด ์œ„์น˜ํ•œ ์†์„ฑ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

developer.mozilla.org