์ค์ํํธ์ ์ค์ํ ํน์ฑ ์ค ํ๋๋ "์์ ์ฑ"์ด์ฃ .
๊ทธ๋ฌ๋ค๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ Optional ํ์ ์ ์ค์ํ๊ฒ ๋ค๋ฃจ๋ ๊ฒ ๊ฐ์์.
์ค์ํํธ๋ฅผ ์ฒ์ ๊ณต๋ถํ์ ๋ Optional ํ์ ์ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด
"?๋ !๋ฅผ ๋ถ์ด๋ ํ์ . ๊ฐ์ด ์์ ์๋ ์์ ์๋ ์๋ ํ์ ." ์ ๋๋ก ์์๋๋๋ฐ
Enum(์ด๊ฑฐํ), Associated Value(์ฐ๊ด๊ฐ), Generic(์ ๋ค๋ฆญ) ๊ฐ๋ ์ ๊ฐ์ ธ์์
์ต์ ๋์ ์กฐ๊ธ ๋ ๊น๊ฒ ์์๋ณผ๊น ํด์.
Optional์ ๊ตฌ์กฐ - Enum ํ์
์ต์ ๋ ํ์ ์ ์ค์ํํธ์ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅ๋ ํ์ ์ธ๋ฐ, Enumํ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ด์.
๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์ธ some๊ณผ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ธ none, 2๊ฐ์ง ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ ,
์ฐ๋ฆฌ๋ Optional.none์ ์ผ์ด์ค๋ก ๊ฐ์ด ๋ง๋ค์ด์ง ๊ฒ์ nil๊ฐ์ด๋ผ๊ณ ๋ถ๋ฌ์.
Case none - ๊ฐ์ด ์๋ ๊ฒฝ์ฐ (nil ๊ฐ)
nil์ ๋ํด ๊ฐ๋จํ ์์๋ณผ๊น์?
nil์ ์ฝ๊ฒ ๋งํด์ "๊ฐ์ด ์์"์ ์๋ฏธํด์.
nil์ ํ์ ์ผ๋ก ํผ๋ํ ์๋ ์๋๋ฐ, nil์ ๊ฐ(Value)์ ๋๋ค!
(is~ ๋ผ๋ ์ด๋ฆ์ ๋ณดํต True, False ๊ฐ์ ๋ฆฌํดํ๋ Bool ํ์ ์ ๋ณ์๋ช ์ผ๋ก ๋ง์ด ์ฌ์ฉํ์ง๋ง
์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ค๋ฅธ ํ์ ์ ๋ณ์์ ์ฌ์ฉํ๊ฒ ๋ ์ ์ํด๋ถํ๋๋ฆด๊ฒ์...)
๋งจ ์ฒซ ๋ฒ์งธ ์ฝ๋์์ isNilType์ ํ์ ์ Nil๋ก ์ฃผ์์ ๋ Nil์ด๋ผ๋ ํ์ ์ ์ฐพ์ ์ ์๋ค๋ ์ค๋ฅ๊ฐ ๋จ๋ ๊ฒ์ ํตํด ์ ์ ์์ต๋๋ค.
nil์ด ๊ฐ์ธ ๊ฒ์ ์์์ผ๋, ๋ ๋ฒ์งธ ์ฝ๋์์ isNilValue1์ด๋ผ๋ ๊ฐ์ nil์ ํ ๋นํ์ด์.
๊ทธ๋ฐ๋ฐ Int์ String๊ณผ๊ฐ์ ๋ค๋ฅธ ๊ฐ๊ณผ ๋ค๋ฅด๊ฒ ๋ฐ๋ก ํ ๋น์ด ๋์ง ์๊ณ type์ ์๋ ค๋ฌ๋ผ๋ ์ค๋ฅ๊ฐ ๋จ๋ค์.
๊ทธ๋์ ์ธ ๋ฒ์งธ ์ฝ๋์์๋ Optional ํ์ ์ ๋ฃ์ด์คฌ๋๋ฐ ์ ๋ค๋ฆญ ํ๋ผ๋ฏธํฐ๋ฅผ ์๊ตฌํ๋ ์๋ฌ๊ฐ ๋จ๋ค์!
ํน์ ์ ๋ค๋ฆญ์ ๋ํด ๋ชจ๋ฅด์ ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋ํด์๋ ์ผ๋จ ๋์ด๊ฐ๊ณ ๋ท ๋ถ๋ถ์์ ๋ค์ ์ค๋ช ํด๋๋ฆด๊ฒ์.
๊ทธ ๋ ๊น์ง ์ ๋ค๋ฆญ์ด "ํ์ ๊ณผ ๊ด๋ จ๋ ๊ฐ๋ "์ด๋ผ๊ณ ๋ง ๊ธฐ์ตํด๋๊ธฐ๋ก ํด์ ใ ใ
๋ค ๋ฒ์งธ ์ฝ๋์์๋ ์ ๋ค๋ฆญ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ถ๊ฐํด์ Optional<Any>๋ผ๋ ํ์ ์ ๋ช ์ํด์ฃผ๊ณ ๋ ํ์์ผ nil์ ํ ๋นํด์ฃผ์์ด์.
Optional<Any>์์ Any๋ก ๊ฐ์ ๋ก ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ํ์ง๋ง, nil์ด ์ถ๋ ฅ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์๊ฒ ์ต์ํ ์ต์ ๋ ํํ์ธ "?"๋ฅผ ์ฌ์ฉํ์ฌ Any?๋ก ๋ฐ๊ฟ์ ์ธ ์ ์์ฃ .
์ฆ, ์ต์ ๋ ํ์ ์ Enum์ผ๋ก ๋ง๋ค์ด์ก๊ณ , ์ต์ ๋ ํ์ ์ ํ ๋น๋ ๊ฐ์ด ์์ ๋(๊ฐ์ด nil์ผ ๋)๋
์ต์ ๋์ .none ์ผ์ด์ค์ธ ๊ฒ์ด์ฃ .
Case some - ๊ฐ์ด ์๋ ๊ฒฝ์ฐ (์ฐ๊ด๊ฐ)
์์์๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช ํ์ผ๋, ์ด๋ฒ์๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช ํด๋๋ฆด๊ฒ์.
์ธ ๊ฐ์ง Optional ํ์ ์ ๋ง๋ค์ด๋ดค์ด์.
์ฒซ ๋ฒ์งธ ์ต์ ๋์ ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ Int ํ์ ์ด๋ผ๋ Optional,
๋ ๋ฒ์งธ ์ต์ ๋์ ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ String ํ์ ์ด๋ผ๋ Optional,
์ธ ๋ฒ์งธ๋ ์ต์ ๋ ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ ์ด๋ค ํ์ ์ด๋ ์๊ด ์๋ค๋ Optional (์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ Optional) ์ ๋๋ค.
์ต์ ๋ case some ์์ ๊ดํธ๊ฐ ์๋๋ฐ, ์ด๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ด๋ค ํ์ ์ธ์ง๋ฅผ ๋ช ์ํ ๊ฒ์ ๋๋ค.
case ์์ ๊ดํธ๋ฅผ ์ฐ๊ด๊ฐ(Associated Value)์ด๋ผ๊ณ ํ๋๋ฐ,
์ฐ๊ด๊ฐ์ enumํ์ ์์ ํด๋น ์ผ์ด์ค๋ฅผ ํตํด ๋ง๋ค์ด์ง ๋ณ์์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ฃ์ด์ค ๋ ์ฌ์ฉํฉ๋๋ค.
case some์์ ์ด๋ค ๊ฐ์ด ์๋์ง์ ๋ํด ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ด๊ฐ์ ์ฌ์ฉํ ๊ฒ์ด๊ณ ,
์ธ์คํด์ค๋ฅผ ์์ฑ ํ ๋ ํด๋น ๊ฐ์ ๋ฃ์ด์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ค ๊ฐ์ด ๋ค์ด์์ผ ํ๋์ง ํ์ ๋ง ๋ช ์ํด์ค ๊ฒฝ์ฐ์ ๋๋ค.
์ฐ๊ด ๊ฐ์ ๋ํด์๋ ๋ค์ ๊ธ์์ ์์ธํ ๋ค๋ฃจ๋๋ก ํ ๊ฒ์.
์์์ ์ ์ธํ๋ ๊ฐ ์ต์ ๋ ํ์ ๋ค์ ์ด์ฉํด์ 4๊ฐ์ ๊ฐ์ ๋ง๋ค์ด๋ดค์ด์.
์ ์ ๊ฐ์ด ์๋ Int ์ต์ ๋, ๋ฌธ์์ด ๊ฐ์ด ์๋ String ์ต์ ๋, double ๊ฐ์ด ์๋ ์ผ๋ฐ Optional(Any ํ์ ์ผ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฐ์ด ์ค๋ ์๊ด์ด ์์ต๋๋ค) ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ Optional์์ nil ๊ฐ์ด ๋ค์ด์๋ ๊ฒฝ์ฐ(๊ฐ์ด ์๋ ๊ฒฝ์ฐ)์ ๋๋ค.
๊ฐ ๋ค ๊ฐ์ ๋ณ์๋ฅผ ์์ฑํ๊ณ ๋ณ์์ ๊ฐ๊ณผ ํ์ ์ ์ถ๋ ฅํด์ฃผ์์ต๋๋ค.
nilValue๋ฅผ ์ ์ธํ๊ณ some(๊ฐ)ํํ๋ก ๋์์๋๊ฒ ๋ณด์ด์์ฃ ?
์ฆ, ๊ฐ์ด ์์๊ณผ ๋์์ ์ฐ๊ด๊ฐ์ ์ด์ฉํด์ ์ด๋ค ๊ฐ์ด ๋ค์ด์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์ฃ .
type(of:)๋ฅผ ํตํด ๊ฐ ๋ณ์๋ค์ ํ์ ์ ์ถ๋ ฅํ์ ๋์๋ ๊ฐ ๋ณ์์ ํ์ ์ด ๋์ค๋ค์.
๊ทธ๋ฐ๋ฐ ์ด์ํ์ง ์๋์? ์ Int, String๊ณผ ๊ฐ์ ํ์ ์ด ์๋๊ฑธ๊น์?
Generic(์ ๋ค๋ฆญ)
'๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[XCode] ์ ์ฐ๋ ๋จ์ถํค ๋ชจ์ (0) | 2021.11.24 |
---|---|
[Swift] Enum ํ์ ์ ์ฐ๊ด๊ฐ (0) | 2021.11.01 |
[iOS] ๊ณต๊ณต ๋ฐ์ดํฐ API ์ด์ฉํ๊ธฐ (Alamofire) (0) | 2021.08.22 |
[Swift] ๋งค๊ฐ๋ณ์(Parameter)์ ์ ๋ฌ์ธ์(Argument) + ์ ๋ฌ์ธ์ ๋ ์ด๋ธ(Argument Label) (0) | 2021.08.05 |
[Swift] ๋ฌธ์์ด ๊ด๋ จ ํ๋กํผํฐ์ ๋ฉ์๋ (0) | 2021.07.12 |
๋๊ธ