-
[Swift] Optional - 2 (IUO, Nil-Coalescing, Optional Chaining)Swift 2022. 2. 14. 23:57
์ง๋ ์๊ฐ์ ์ด๋ฒ์๋ IUO, Nil-Coalescing Operator, Optional Chaining์ ๋ํด ์ฐจ๋ก๋๋ก ์ดํด๋ณด์.
1. IUO (Implicitly Unwrapped Optionals)
IUO๋ Implicitly Unwrapped Optionals์ ์ค์๋ง์ผ๋ก, ํน์ ์กฐ๊ฑด์์ ์๋์ผ๋ก ์ถ์ถ๋๋ Optional์ด๋ค.
Type!์๋ฃํ ๋ค์ !๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ์ Non-Optional๋ก ์ ์ฅํ๋ฉด ์๋์ผ๋ก unwrapping์ด ๋๋ค.
์๋ ์์๋ฅผ ๋ณด์.

์์ num์ IUO๋ก ์ ์ฅํ๊ณ , ์์ a์ ๊ฐ์ num์ผ๋ก ์ด๊ธฐํํด์ฃผ์๋ค.
์์์ ๊ณต๋ถํ ๋๋ก๋ผ๋ฉด, IUO๋ ์๋์ผ๋ก ์ถ์ถ๋๊ธฐ ๋๋ฌธ์ ์์ a์ ํ์ ์ Non-Optional Int์ด์ด์ผํ๋ค.
ํ์ง๋ง a์ ํ์ ์ Optional Int์ด๋ค.
IUO๋ Type Inference (ํ์ ์ถ๋ก )์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก ์ถ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์,
IUO์์ ์๋ ์ถ์ถ์ ํ๋ ค๋ฉด ๋ฐ๋์ Type Annotation (ํ์ ์ง์ )์ ํด์ฃผ์ด์ผํ๋ค.
๊ทธ๋์ ์ง์ ํ์์ ์ง์ ํด์ค b์ ํ์ ์ Int์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
IUO๋ Optional์ด๊ธด ํ์ง๋ง, Optional๊ณผ ๋ค๋ฅธ ์ ์ ํน์ ์กฐ๊ฑด์์ ์๋์ผ๋ก ์ถ์ถ๋๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ด ์ ์ฅ๋์ด์๋ค๋ฉด !๋ฅผ ์ด์ฉํด์ Force Unwrapping (๊ฐ์ ์ถ์ถ)๋ ํ ์ ์๊ณ , Optional Binding ๋ํ ํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, nil์ด ์ ์ฅ๋์ด์๋ค๋ฉด ๊ฐ์ด ์๋๋ฐ ์ด๋ฅผ ์ถ์ถํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ crash๊ฐ ๋ฐ์ํ๋ค.
iOS์์ IUO๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ก๋ ๋ํ์ ์ผ๋ก ์์ธ๋ ์ ์ฐ๊ฒฐํ ๋๋ฅผ ์์๋ก ๋ค ์ ์๋๋ฐ,
@IBOutlet weak var label1: UILabel!์์ธ๋ ๊ณผ ๊ฐ์ด ์ค์ํ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ผ๋ฅธ ์ฐพ์์ค์ผํ๋ฏ๋ก, IUO๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๋ค.
IUO๋ crash์ ์ํ์ด ์๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋์ง ์๋๋ค.
๊ฐ๊ธ์ ์ด๋ฉด IUO๋ณด๋ค๋ Optional, Optional Binding์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
2. Nil-Coalescing Operator
Nil-Coalescing Operator๋ ์ฐ๋ฆฌ๋ง๋ก ๋ ๋ณํฉ ์ฐ์ฐ์๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, ์ดํญ ์ฐ์ฐ์์ด๋ค.
๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
OptionalExpresssion ?? Expression์ผ์ชฝ์๋ Optional ํํ์์ด, ์ค๋ฅธ์ชฝ์๋ Non-Optional ํํ์์ด ์จ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ณํฉ ์ฐ์ฐ์ ์ ์์ ์ค๋ ํํ์์ Optional์ ์ ์ธํ๊ณ ์๋ก ๊ฐ์ ํ์์ด์ฌ์ผํ๋ค.
๋ ๋ณํฉ ์ฐ์ฐ์๋ ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ํํ๋๋ฐ,
๋ง์ฝ OptionalExpression์ด ๊ฐ์ ๋ฆฌํดํ๋ค๋ฉด, Expression์ ํ๊ฐํ์ง ์๋๋ค.
๋ฐ๋๋ก OptionalExpression์ด ๊ฐ์ ๋ฆฌํดํ์ง ์๋๋ค๋ฉด, Expression์ด ํ๊ฐ๋๋ค. ๋ฐ๋ผ์ Expression์๋ Side effect๋ฅผ ๋ฐ์์ํค๋ ์ฝ๋๊ฐ ์์ด์๋ ์๋๋ค.
์๋ ์ฝ๋๋ ๋ฐ์ธ๋ฉ ์ฑ๊ณต ์ "Hello, I'm hee"๋ฅผ, ์คํจ ์ "Bye"๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค.

๋ ๋ณํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ์ด ์ ์ฅ๋์ด์๋์ง ํ์ธํ๋ ์ฝ๋์ ๊ฐ์ ์ถ์ถํ๋ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ ํ์๊ฐ ์๋ค.
์์ ์ฝ๋๋ฅผ ๋ ๋ณํฉ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๋ ๊ฐ๋จํ๊ฒ ๋ํ๋ด๋ณด์.
var str: String? = "Hello, I'm hee" print(str ?? "Bye")๋จผ์ str์ ํ๊ฐํ๊ณ , str์ด ๊ฐ์ ๋ฆฌํดํ๋ค๋ฉด, "Hello, I'm hee"๊ฐ ์ถ๋ ฅ์ด ๋๋ค.
str์ด ๊ฐ์ ๋ฆฌํดํ์ง ์๊ฑฐ๋ nil์ ๋ฆฌํดํ๋ค๋ฉด "Bye"๊ฐ ์ถ๋ ฅ๋๋ค.
3. Optional Chaining
Optional Chaining์ Optional ๋ฉค๋ฒ์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ๊ฒฐ๊ณผ๋ ํญ์ Optional์ด๋ค.
Optional Chaining์ ํฌํจ๋ ํํ์ ์ค ํ๋๋ผ๋ nil์ ๋ฆฌํดํ๋ ๊ฒ์ด ์๋ค๋ฉด ์ด์ด์ง๋ ํํ์์ ํ๊ฐํ์ง ์๊ณ ๋ฐ๋ก nil์ ๋ฆฌํดํ๋ค.
Optional Chaining์ผ๋ก ๋ฆฌํด๋๋ ํ์ ์ ํ๊ฐ ๊ฒฐ๊ณผ์ ์๊ด ์์ด ๋ฌด์กฐ๊ฑด ๋ง์ง๋ง ๋ฉค๋ฒ์ ํ์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Function - 2 (Variadic Parameter, In-Out Parameter) (0) 2022.02.15 [Swift] Function - 1 (Defining/Calling Function, Parameter, Argument Label) (0) 2022.02.15 [Swift] Optional - 1 (Forced Unwrapping, Optional Binding) (0) 2022.02.14 [Swift] enumerated() (0) 2022.02.08 [Swift] ๋ณ์์ ์์ (Variables and Constants) (0) 2022.02.07