Optional์ด๋?
Optional์ ๋ณ์์ ๊ฐ์ด ์์ ์๋ ์๊ณ ์์ ์๋(nil) ์๋ค๋ ๊ฑธ ๋ํ๋ด๋ ํ์ ์ด์์.
์ฆ, “์ด ๋ณ์๋ ์์ง ๊ฐ์ด ์์ ์๋ ์๋ค”๋ ๊ฑธ Swift์๊ฒ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ๋ ๊ฑฐ์ฃ .

์ด๋ ๊ฒ nil์ ๋์ ํ๋ ค๊ณ ํด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ์.
var name: String? = nil
name = "์๋์ฟค"
์ด๋ ?๋ฅผ ๋ถ์ฌ ์ ์ธํด์ผ nil์ ์ ์ฅํ ์ ์์ต๋๋ค.
์ ๋ ์ฒ์ ์ต์ ๋์ ๋ฐฐ์ธ ๋ ์๋ขฐ๋ฉ๊ฑฐ์ ๊ณ ์์ด๋ผ๋ ๋น์ ๋ฅผ ๋ค์๋๋ฐ ๊ณต๊ฐ์ด ๊ฐ๋๋ผ๊ตฌ์.
๊ทธ๋ฐ๋ฐ ์ด๊ฑธ ๊ทธ๋ฅ print ํ๋ฉด ์๋์ฒ๋ผ ๋์ต๋๋ค.
Optional("์๋์ฟค")
์ด๋๋ก๋ ์ธ ์ ์๊ฒ ์ฃ ! ๊ทธ๋์ ์ต์ ๋์ ‘๊ฐ์ ๊บผ๋ด๋ ๊ณผ์ (์ธ๋ํ)’์ด ๊ผญ ํ์ํฉ๋๋ค.
1. ๊ฐ์ ์ธ๋ํ (Forced Unwrapping)
var name: String? = "์๋์ฟค"
print(name!) // "์๋์ฟค"
๊ฐ์ ์ธ๋ํ์ ๊ฐ ๋ค์ !๋ฅผ ๋ถ์ฌ “์ด๊ฑด ๋ฌด์กฐ๊ฑด ๊ฐ์ด ์์ด!” ๋ผ๊ณ ์ ์ธํ๋ ๋ฐฉ์์ด์์.
์ด๋ ๊ฐ์ด nil์ด๋ฉด ์ฑ์ด ๋ฐ๋ก ์ฃฝ๋๋ฐ์…
name = nil
// print(name!) // ๋ฐํ์ ์๋ฌ: Unexpectedly found nil...
์ฆ, ์ฌ๋งํ๋ฉด ์ฐ์ง ์๋ ๊ฒ ์ข์ต๋๋ค!
2. ์ต์ ๋ ๋ฐ์ธ๋ฉ (Optional Binding)
Optional์ด nil์ธ์ง ํ์ธํ ๋ค์, ๊ฐ์ด ์์ผ๋ฉด ๊บผ๋ด์ ์๋ก์ด ์์๋ ๋ณ์์ ๋ด๋ ๋ฐฉ์์ด์์.
๊ทธ๋ฌ๋ ๊ฐ์ ์ธ๋ํ๋ณด๋ค ํจ์ฌ ์์ ํ๊ฒ ์ฃ ?
if let
var nickname: String? = "zero"
if let nick = nickname {
print("๋๋ค์์ \\(nick)์
๋๋ค.")
} else {
print("๋๋ค์์ด ์์ต๋๋ค.")
}
๊ฐ์ด ์์ผ๋ฉด else ๋ธ๋ก์ด ์คํ๋ฉ๋๋ค. if๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํจํด๋ ์ฑ์ด ์ฃฝ์ง ์์์.
guard let
func greet() {
guard let nick = nickname else {
print("๋๋ค์์ด ์์ต๋๋ค.")
return
}
print("์๋
ํ์ธ์, \\(nick)๋!")
}
guard let์ ํจ์ ์ด๋ฐ์ ์์ฃผ ์๋๋ค. ๊ฐ์ด ์์ผ๋ฉด return์ผ๋ก ์กฐ๊ธฐ ์ข ๋ฃํ๊ณ , ์์ผ๋ฉด ์ดํ ์ฝ๋๋ฅผ ๊ณ์ ์คํํฉ๋๋ค.
3. ์ต์ ๋ ์ฒด์ด๋ (Optional Chaining)
@objc
private func nextButtonDidTap() {
let viewController = NextViewController()
navigationController?.pushViewController(viewController, animated: true)
}
์ฌ๊ธฐ์ navigationController๊ฐ nil์ด๋ผ๋ฉด?
์ฑ์ด ์ฃฝ์ง ์๊ณ ๊ทธ๋ฅ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๊ฐ ๋ฐ๋ก ?. ๋๋ถ์ธ๋ฐ์.
Optional Chaining์ ๊ฐ์ด ์์ ๋๋ง ๋์ํ๊ณ , ์์ผ๋ฉด ์กฐ์ฉํ ๋ฌด์ํ๊ณ ์ข ๋ฃ๋ฉ๋๋ค!
4. Nil ๋ณํฉ ์ฐ์ฐ์ (Nil-Coalescing Operator)
์ต์ ๋์ด nil์ผ ๋ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๊ณ ์ถ์ ๋ ??๋ฅผ ์ฌ์ฉํฉ๋๋ค.
var userName: String? = nil
let displayName = userName ?? "์ ๋ก"
print(displayName) // "์ ๋ก"
๊ฐ์ด ์์ผ๋ฉด ๊ทธ๋๋ก, ์์ผ๋ฉด "์ ๋ก"๊ฐ ๋์ ๋ค์ด๊ฐ๋๋ค.
UI์์ “~์ด ์์ผ๋ฉด ๊ธฐ๋ณธ ๋ฌธ๊ตฌ ํ์ํ๊ธฐ” ๊ฐ์ ์ํฉ์์ ์์ฃผ ์ฌ์ฉํด์.
'๐ถ๐ข๐ฆ > ๐ iOS ๊ฐ๋ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS / Swift] Equatable, Hashable, Comparable (0) | 2025.11.05 |
|---|---|
| [iOS / Swift] Enum์ด๋? (2) | 2025.11.04 |
| [iOS / Swift] ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋? (0) | 2025.10.16 |
| [iOS / Swift] ์ ๊ทผ ์ ์ด์(Access Control Levels) (0) | 2025.10.16 |
| [iOS / Swift] final ํค์๋์ ์ฑ๋ฅ์ ์ด์ ์ ๋ํด์ (0) | 2025.10.16 |