[C++] C++17 optional
C++17๋ถํฐ ์ต์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋์๋ค.
์ด ์ต์ ๋ ํ์ ์ ์๋ ํจ์ํ ์ธ์ด์์ ๋์จ ๊ฐ๋ ์ธ๋ฐ, ๊ฐ๋ ์ ์ผ๋ก๋ ๋ชจ๋๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์ธ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ์ค ํ๋๋ฉฐ, ์์ ์ฑ์ด ๋์์ ๋ช
๋ นํ ์ธ์ด๋ค์์๋ ์ฑ์ฉ์ ๋ง์ด ํ๋ ํธ์ด๋ค.
C#์ Nullable์ด ๊ทธ๋ ๊ณ , Swift์ ์ต์
๋, ์ฝํ๋ฆฐ์ ??, ๋ฌ์คํธ์ Result ๋ฑ์ด ์๋ค.
๋จ์ด ์์ฒด์ ๋ป์ ๋ณด๋ฉด '์ ํ์ ์ธ'์ด๋ผ๋ ๋ป์ธ๋ฐ. ๊ฐ์ด ์ ํ์ ์ผ๋ก ์์์๋ ์์์๋ ์๋ค๋ ๋ป์ด๋ค.
์ข ๋ค๋ฅด๊ธด ํ์ง๋ง ํฌ์ธํฐ ํ์
๋ ์ด๋ฐ ๋ฉด์์ ์ต์
๋์ ํน์ฑ์ ๊ฐ์ง๋ค๊ณ ํ ์๋ ์๋ค.
๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ฉด ๊ฐ์ด ์๋ ๊ฒ์ด๊ณ ๋ญ๋ผ๋ ๊ฐ๊ณ ์์ผ๋ฉด ์ฃผ์๊ฐ ์๋๊ฑฐ๋๊น ๊ฐ์ด ์๋ ๊ฒ์ด๋ค.
์ต์
๋์ ์ด๋ฌํ ํน์ฑ์ ํฌ์ธํฐ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํ์
์ ์ ์ฉ์ํฌ ์๊ฐ ์๋ค.
๊ฒ๋ค๊ฐ ๊ฐ์ด ๋ค์ด์๋์ง ์๋์ง ๋ช
์์ ์ผ๋ก ํ์ธ์ ํ๊ฒ ํด์ ํฌ์ธํฐ์ ๋นํ๋ฉด ์์ฃผ ์์ ํ๋ค.
๊ทธ๋์ ๊ท์ฐฎ์ ๋ฉด์ด ์๊ธด ํ์ง๋ง ์ด๋์ ๋ ๊ฐ์ํ ๋งํ ๋ถ๋ถ์ด๋ผ ์๊ฐ๋๋ค.
์ต์
๋๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ๊ทธ ์์ฒด๋ก๋ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ด ๋ค์ด์๋ ์ํ์ธ์ง ์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ต์
๋์ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด value ๋ฉ์๋๋ฅผ ์ฐ๋ฉด ๋๋ค.
๋ค๋ง ๊ฐ์ด ์์ ๋ ์ฐ๋ฉด ์์ธ๊ฐ ๋จ๋๊น has_value๋ operator bool๋ก ๊ฐ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ณ ์ฌ์ฉํด์ผ ํ๋ค.
"John"์ด๋ผ๋ ๊ฐ์ด ๋ฉ์ฉกํ ๋ค์ด์์ผ๋ ์์ฃผ ์ ์ํ๋๋ค.
๊ฐ์ด ์์ผ๋ "??"๊ฐ ๋์จ๋ค.
ํฌ์ธํฐ์์ ๋น ์ฃผ์๋ฅผ ํํํ๋ ์ฉ๋๋ก nullptr๊ฐ ์์ฝ๋๊ฒ์ฒ๋ผ
๋น ์ต์
๋์ ํํํ๋ ๊ฐ์ฒด๋ก nullopt๊ฐ ์๋ค.
๊ทผ๋ฐ ๊ฐ์ ์ฌ์ฉํ ๋๋ง๋ค ์กฐ๊ฑด๋ฌธ์ ๋ฌ์์ฃผ๋๊ฑด ๊ฝค ๊ท์ฐฎ์ ์์
์ด๋ค.
์์์ ํ๋๊ฑด value_or ๋ฉ์๋ ํ๋๋ก ํ์น ์ ์๋ค.
์ด๊ฑด ๊ฐ์ด ๋ค์ด์์ผ๋ฉด ๊ฐ ๊ทธ๋ฅ ๋ฐํํ๊ณ , ๊ฐ์ด ์์ผ๋ฉด ์ธ์๋ก ๋ฐ์๊ฑธ ๋ฐํํ๋ค.
์ถํ ๊ฐฑ์