๐ฎโโ๏ธ
assert์ guard
March 20, 2023
๐ก assert ํจ์
ํน์ v์กฐ๊ฑด์ ์ฒดํฌํ๊ณ ์กฐ๊ฑด์ด ์ฑ๋ฆฝ๋์ง ์์ผ๋ฉด ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ ๋์ค์ ์์ฑํ๋ ๋ค์ํ ๊ฒฐ๊ณผ๊ฐ์ ๋์ ์ผ๋ก ํ์ธํ๊ณ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ์ธํ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- assert(::file:line:) ํจ์๋ฅผ ์ฌ์ฉ
- ๋๋ฒ๊น ๋ชจ๋์์๋ง ๋์
- ๋ฐฐํฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ ์ธ๋จ
- ์ฃผ๋ก ๋๋ฒ๊น ์ค ์กฐ๊ฑด์ ๊ฒ์ฆ์ ์ํด ์ฌ์ฉ
var someInt: Int = 0
assert(someInt == 0, "someInt != 0")
// ์กฐ๊ฑด (someInt == 0)์ ๋ถํฉํ๋ฉด ์ง๋๊ฐ๊ธฐ
// ๋ถํฉํ์ง ์์ผ๋ฉด -> (๋์ ์ค์ง) Assertion failed: someInt != 0
someInt = 1
// assertion failed: someInt != 0: file guard_assert.swift, line 26
func functionWithAssert(age: Int?) {
assert(age != nil, "age == nil")
assert((age! >= 0) && (age! <= 130), "๋์ด๊ฐ ์
๋ ฅ์ด ์๋ชป๋์์ต๋๋ค")
print("๋น์ ์ ๋์ด๋ \(age!)์ธ์
๋๋ค")
}
functionWithAssert(age: 50)
//functionWithAssert(age: -1) // ๋์ ์ค์ง, ๊ฒ์ฆ ์คํจ
//functionWithAssert(age: nil) // ๋์ ์ค์ง, ๊ฒ์ฆ ์คํจ
๐ก guard ๊ตฌ๋ฌธ
๋ฌธ๋ฒ guard ์กฐ๊ฑด else {์กฐ๊ฑด์ด false์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ}
- guard ๊ตฌ๋ฌธ์ ํต์ฌ์ Early EXIT (๋น ๋ฅธ ์ข ๋ฃ)
if ์กฐ๊ฑด๋ฌธ๊ณผ ๋น๊ตํด๋ณธ๋ค๋ฉด, if๋ฌธ์ โ(์กฐ๊ฑด)์ด๋ฉด (code)ํด๋ผโ์ ์คํ๊ตฌ๋ฌธ์ด์ง๋ง, guard๊ตฌ๋ฌธ์ ๊ฒฝ์ฐ โ(์กฐ๊ฑด)์ด ์๋๋ฉด ๋๋ด๋ผโ
- ๋๋ฒ๊น ๋ชจ๋๋ฟ๋ง ์๋๋ผ ์ด๋ค ์กฐ๊ฑด์์๋ ๋์ ๊ฐ๋ฅ
- guard์ else ๋ธ๋ญ ๋ด๋ถ์๋ _ํน์ ์ฝ๋๋ธ๋ญ์ ์ข ๋ฃํ๋ ์ง์์ด(return, break, continue, throw ๋ฑ)_๊ฐ ๊ผญ ์์ด์ผ ํ๋ค.
- ๋จ์ ์กฐ๊ฑด ํ๋จ ํ ๋น ๋ฅด๊ฒ ์ข ๋ฃํ ๋๋ ์ฉ์ด
guard let ์ต์ ๋ ๋ฐ์ธ๋ฉ
func functionWithGuard(age: Int?) {
guard let unwrappedAge = age, // guard let์ ํตํด ์ต์
๋ ๋ฐ์ธ๋ฉ
// age๊ฐ nil์ผ ๊ฒฝ์ฐ ์คํ X -> ์ข
๋ฃ
unwrappedAge < 130,
unwrappedAge >= 0 else {
print("๋์ด๊ฐ ์
๋ ฅ์ด ์๋ชป๋์์ต๋๋ค")
return
}
// ์กฐ๊ฑด 1 = unwrappedAge < 130, ์กฐ๊ฑด 2 = unwrappedAge >= 0
// ์กฐ๊ฑด๊ณผ ๋ง์ง ์์ ๊ฒฝ์ฐ "๋์ด๊ฐ ์
๋ ฅ์ด ์๋ชป๋์์ต๋๋ค" ์ถ๋ ฅ -> ์ข
๋ฃ
print("๋น์ ์ ๋์ด๋ \(unwrappedAge)์ธ์
๋๋ค")
// guard๊ตฌ๋ฌธ์ ํต๊ณผํ์ ๊ฒฝ์ฐ ๋น์ ์ ๋์ด๋ OO์ธ์
๋๋ค ์ถ๋ ฅ
}
- if-let ๊ตฌ๋ฌธ๊ณผ ๋ค๋ฅด๊ฒ, else๋ฌธ ์๋ต ๋ถ๊ฐ๋ฅ
- ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น์ด ๋ฐ๋์ ํ์
- ์๊ตฌ์ฌํญ๋ง์ ๋ฐ์ํด์ ์์ธ์ฒ๋ฆฌํ ๊ฒฝ์ฐ guard let์ด ์ ์ฉ
- ํจ์ ์ ์ฒด์์ optional๋ก ์ถ์ถ๋ ์์๋ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ฐ๋ณต๋ฌธ ์์์์ guard ๊ตฌ๋ฌธ
var count = 1
while true {
guard count < 3 else {
break
}
print(count)
count += 1
}
// 1
// 2
Dictionary ํ์ฉ
func someFunction(info: [String: Any]) {
guard let name = info["name"] as? String else {
return
}
guard let age = info["age"] as? Int, age >= 0 else {
return
}
print("\(name): \(age)")
}
someFunction(info: ["name": "jenny", "age": "25"]) // ์ข
๋ฃ
someFunction(info: ["name": "jisoo"]) // ์ข
๋ฃ
someFunction(info: ["name": "doris", "age": 25]) // doris: 25