[C++] C++17 optional

C++17๋ถ€ํ„ฐ ์˜ต์…”๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

์ด ์˜ต์…”๋„ ํƒ€์ž…์€ ์›๋ž˜ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์ธ๋ฐ, ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋ชจ๋‚˜๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฉฐ, ์•ˆ์ „์„ฑ์ด ๋†’์•„์„œ ๋ช…๋ นํ˜• ์–ธ์–ด๋“ค์—์„œ๋„ ์ฑ„์šฉ์„ ๋งŽ์ด ํ•˜๋Š” ํŽธ์ด๋‹ค.
C#์˜ Nullable์ด ๊ทธ๋ ‡๊ณ , Swift์˜ ์˜ต์…”๋„, ์ฝ”ํ‹€๋ฆฐ์˜ ??, ๋Ÿฌ์ŠคํŠธ์˜ Result ๋“ฑ์ด ์žˆ๋‹ค.

๋‹จ์–ด ์ž์ฒด์˜ ๋œป์„ ๋ณด๋ฉด '์„ ํƒ์ ์ธ'์ด๋ผ๋Š” ๋œป์ธ๋ฐ. ๊ฐ’์ด ์„ ํƒ์ ์œผ๋กœ ์žˆ์„์ˆ˜๋„ ์—†์„์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

์ข€ ๋‹ค๋ฅด๊ธด ํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ ํƒ€์ž…๋„ ์ด๋Ÿฐ ๋ฉด์—์„œ ์˜ต์…”๋„์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๋„ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๋ฉด ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์ด๊ณ  ๋ญ๋ผ๋„ ๊ฐ–๊ณ ์žˆ์œผ๋ฉด ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š”๊ฑฐ๋‹ˆ๊นŒ ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ต์…”๋„์€ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ํฌ์ธํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํƒ€์ž…์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธ์„ ํ•˜๊ฒŒ ํ•ด์„œ ํฌ์ธํ„ฐ์— ๋น„ํ•˜๋ฉด ์•„์ฃผ ์•ˆ์ „ํ•˜๋‹ค.
๊ทธ๋Œ€์‹  ๊ท€์ฐฎ์€ ๋ฉด์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ ์–ด๋А์ •๋„ ๊ฐ์ˆ˜ํ• ๋งŒํ•œ ๋ถ€๋ถ„์ด๋ผ ์ƒ๊ฐ๋œ๋‹ค.


์˜ต์…”๋„๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๋Š” ๊ทธ ์ž์ฒด๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์•„๋‹Œ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์˜ต์…”๋„์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด value ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.
๋‹ค๋งŒ ๊ฐ’์ด ์—†์„ ๋•Œ ์“ฐ๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋œจ๋‹ˆ๊นŒ has_value๋‚˜ operator bool๋กœ ๊ฐ’ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

"John"์ด๋ผ๋Š” ๊ฐ’์ด ๋ฉ€์ฉกํžˆ ๋“ค์–ด์žˆ์œผ๋‹ˆ ์•„์ฃผ ์ž˜ ์ˆ˜ํ–‰๋œ๋‹ค.


๊ฐ’์ด ์—†์œผ๋‹ˆ "??"๊ฐ€ ๋‚˜์˜จ๋‹ค.


ํฌ์ธํ„ฐ์—์„œ ๋นˆ ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์šฉ๋„๋กœ nullptr๊ฐ€ ์˜ˆ์•ฝ๋œ๊ฒƒ์ฒ˜๋Ÿผ
๋นˆ ์˜ต์…”๋„์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋กœ nullopt๊ฐ€ ์žˆ๋‹ค.

๊ทผ๋ฐ ๊ฐ’์„ ์‚ฌ์šฉํ• ๋•Œ๋งˆ๋‹ค ์กฐ๊ฑด๋ฌธ์„ ๋‹ฌ์•„์ฃผ๋Š”๊ฑด ๊ฝค ๊ท€์ฐฎ์€ ์ž‘์—…์ด๋‹ค.
์œ„์—์„œ ํ–ˆ๋˜๊ฑด value_or ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋กœ ํ‰์น  ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฑด ๊ฐ’์ด ๋“ค์–ด์žˆ์œผ๋ฉด ๊ฐ’ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฐ’์ด ์—†์œผ๋ฉด ์ธ์ž๋กœ ๋ฐ›์€๊ฑธ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


์ถ”ํ›„ ๊ฐฑ์‹