์๋ฌด ์๊ฐ ์์ด ์ต์ ๋ ๋ฒ๊ธธ ๋ ์ผ๋ ๊ทธ๋์ ๋๋ฃจ๋ญ์ ํ๊ฒ ์๋ guard๋ฌธ์ ๋ฟ์ ๋ด ์๋ค.
guard๋ฌธ
guard ๋ฌธ์ if๋ฌธ๊ณผ switch๋ฌธ์ฒ๋ผ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌด์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌ ํ ๋ ์ฐ์ด๋ ์กฐ๊ฑด๋ฌธ ๋ฌธ๋ฒ์ ๋๋ค!
guard ๋ฌธ์ ์ด๋ ํ ์กฐ๊ฑด์ ๊ฒ์ฌํ๊ณ guard ๋ฌธ ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์คํํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ ์กฐ๊ฑด๋ฌธ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
if๋ฌธ์ else๋ฌธ ์์ด๋ ์ธ ์ ์์ง๋ง guard ๋ฌธ์ ๋ฌด์กฐ๊ฑด else ๋ฌธ์ ๊ฐ์ง๊ณ ์ด else๋ฌธ ์์์๋ ๋ฌด์กฐ๊ฑด return์ผ๋ก ์ข ๋ฃ ์ํต๋๋ค.
์ ๋ฆฌํ๋ฉด, guard ๋ฌธ์ ์ฃผ์ด์ง ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด๋ฉด ๋ฌธ์ ์์ด ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ณ ๊ฑฐ์ง์ผ ๋, ์ฌ๊ธฐ์ ํญ์ ๋ฌ๋ ค์๋ else๋ฌธ ์ฝ๋ ๋ถ๋ญ์ด ์คํ๋ฉ๋๋ค.
guard๋ '๋น ๋ฅธ ์ข ๋ฃ'๊ฐ ํต์ฌ ํค์๋ ์ ๋๋ค.
์ฆ, ์ํ๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด, ๋ถํ์ํ ์ฝ๋๋ ์คํํ์ง ์๊ณ ์ผ์ฐ ์ข ๋ฃํด ๋ฒ๋ฆฝ๋๋ค.
guard ๋ฌธ์ return, break, continue, throw๋ฅผ ์ด์ฉํด์ ์ฆ์ exit ์์ผ์ผ ํฉ๋๋ค. return์ ํ์ง ์๋ fatalError(_:file:line:)๋ฅผ ์ด์ฉํด exit ์ํฌ ์๋ ์์ต๋๋ค.
guard ๋ฌธ์ if๋ฌธ๋ณด๋ค ๊ฐ๋ ์ฑ์ด ๋ ์ข๋ค๊ณ ํฉ๋๋ค.
์์๋ฅผ ํ ๋ฒ ๋ด ์๋ค.
// if ๊ตฌ๋ฌธ ํ์ฉ
for i in 0...3 {
if i == 1 { print(i) }
else { continue }
}
// guard ๊ตฌ๋ฌธ ํ์ฉ
for i in 0...3 {
guard i == 1 else { continue }
print(i)
}
0๋ถํฐ 3๊น์ง ๋ฐ๋ณตํ์ฌ i๊ฐ 1์ผ ๋ 1์ ์ถ๋ ฅํ๋๋ก ํ๋ ๋ด์ฉ์ ๋๋ค.
์ด ์ฝ๋๋ ๋ค์ํ ์กฐ๊ฑด์ด ์กด์ฌํ์ง ์๊ณ , ํ ๊ฐ์ง์ ์์ธ๋ง์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์์ธ์ฌํญ๋ง์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋๊ฐ ๋ฐ๋ก guard๋ฅผ ์ฌ์ฉํ ์ ์ ํ ์๊ธฐ์ ๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ชฉํด์ผ ํ ์ ์ด ํ๋ ๋ ์๋๋ฐ,
๋ฐ๋ก else์ ํด๋นํ๋ continue ์ฝ๋์ ๋๋ค.
์์์๋ for ๋ฐ๋ณต๋ฌธ ์์ guard ๊ตฌ๋ฌธ์ ์์ฑํ๊ธฐ ๋๋ฌธ์
continue๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์ฝ๋ ๋ธ๋ก ๋ฐ๋ณต์ ์ข ๋ฃ๋ฅผ ์ ์ธํ ์ ์์์ต๋๋ค.
์ด ์ธ์๋ ํจ์๋ ๋ฐ๋ณต๋ฌธ ๋ฑ์์ guard ๊ตฌ๋ฌธ์ else ๋ธ๋ก์
์ ์ด๋ฌธ ์ ํ ๋ช ๋ น์ด๋ก return, break, throw๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ง๋ง ํจ์๋ ๋ฉ์๋ ํน์ ๋ฐ๋ณต๋ฌธ ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด
์ ์ด๋ฌธ ์ ํ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ guard ๋ช ๋ น์ด ๋ํ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ ๋ฐ๋ก guard ๊ตฌ๋ฌธ์ ํ๊ณ์ ์ ๋๋ค.
์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ๋ถ๋ง์กฑํ๋ ๊ฒฝ์ฐ๊ฐ 1:1๋ก ๋ฐ์ํ๋ ์ํฉ์ ์ ์ธํ๊ณ ๋, guard๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ ๋ฆฌํฉ๋๋ค.
์ฆ ์ ๋ฆฌํ๋ฉด
- if๋ฌธ๊ณผ ๋ฌ๋ฆฌ ์กฐ๊ฑด์ด ๋์ด๋ ์๋ก ๋ฐ์ํ๋ ์ฝ๋ ์ค์ฒฉ์ ์ค์
- else๋ฌธ์ ๋จผ์ ๋ฐฐ์น -> ๋จผ์ ์กฐ๊ฑด์ ํ๋ณํ์ฌ ์กฐ๊ธฐ ์ข ๋ฃ(early exit)
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๋ค์ ์ค๋ก ๋์ด๊ฐ์ ๊ณ์ ์คํ
if ๊ตฌ๋ฌธ์ "~๋ฉด ~ํด๋ผ!" ๋ผ๋ ์๋ฏธ์ด์ง๋ง,
guard ๊ตฌ๋ฌธ์ "~์๋๋ฉด ๋๋ด๋ผ!" ๋ผ๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
guard๋ ์์ธ ์ฒ๋ฆฌ์ฉ ์กฐ๊ฑด๋ฌธ!
์ผ๋ก ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ํฉ์ ๋ฐ๋ผ ์ ์ฌ์ฉํ๋ฉด ์ง๊ด์ ์ด๊ณ ๊น๋ํ๊ฒ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
guard let๊ณผ if let์ ์ฐจ์ด์
guard ๋ฌธ์ ๋ํด ์์ ๋ณด์์ผ๋ ์ด๋ฒ์๋ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ์ฐ์ด๋ guard let์ ์์๋ณด๊ณ if let๊ณผ์ ์ฐจ์ด์ ์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ค์์ guard๋ฌธ์ ํ์ฉํ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ํน์ง์ ์ ๋๋ค.
- ์ต์ ๋์ ๋ฒ๊ฒผ์ ๋ nil์ด๋ฉด ๋ ์ด์ ์ฝ๋๋ฅผ ์คํ์ํค์ง ์๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๊ฐํจ -> nil์ด ์๋ ๋๋ง ๊ด์ฌ์ ๊ฐ๊ฒ ๋ค.
- ์ ์ธ๋ ๋ณ์๋ฅผ ์๋๋ฌธ์ฅ์์ ์ฌ์ฉ ๊ฐ๋ฅ (๋์ผํ ์ค์ฝํ๋ก ์ทจ๊ธ)
์์์ฝ๋๋ฅผ ๋ด ์๋ค.
guard let ๋ฌธ
guard let id = students["Dana"] else {
print("There is no student named \"Dana\"")
return
}
print("Dana's id : \(id)"// guard ๋ฌธ์์ ์ ์ธ๋ id ๋ณ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํจ.
- unwrapping ์ ์ฑ๊ณตํ๋ฉด(nil์ด ์๋ ๊ฒฝ์ฐ) ์กฐ๊ฑด๋ฌธ์ true, ์คํจ์ false ๊ฐ ๋ฉ๋๋ค
- optional ๋ณ์ ๊ฐ์ด nil ์ด๋ฉด else ๊ตฌ๋ฌธ์ด ๋์ํ๊ณ return๊ณผ ํจ๊ป ์ข ๋ฃ ๋์ด ๋ฒ๋ฆฝ๋๋ค.
- ์ฑ๊ณตํ๋ฉด guard ๋ฌธ ์๋์ ์ฝ๋๊ฐ ์ด์ด์ ์คํ๋๊ณ ์กฐ๊ฑด์ ์์์ ์ ์ธ๋ ๋ณ์ ๋ํ guard ๋ฌธ์ด ์๋ scope ์์ ํจ๊ป ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค
if let ๋ฌธ
if let id = students["Dana"] {
print("Dana's id: \(id)")
}
print("\(id)") // ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. if ๋ฌธ์ {}์์์๋ง ๋ณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- if let๋ฌธ์ ์ฅ์ ์ ์ฑ๊ณต์์ ์คํจ์ 2๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค
- ์ฆ ์ฝ๋์์ nil์ผ ๋์ nil์ด ์๋ ๋ 2๊ฐ์ง๋ก ๋๋์ด์ ์ฝ๋๋ก ์์ฑํด์ค ์ ์์ต๋๋ค.
- ํ์ง๋ง if let์ ์ง์ญ๋ณ์๋ก๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ฌธ ๋ฐ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก guard let ์ ํญ์ else๊ตฌ๋ฌธ์ด ๋ค์ ๋ฐ๋ผ์์ผ ํ๋ฉฐ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ(true)์ผ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๊ณ์ ์คํ๋๋ฉฐ, ๊ฑฐ์ง(FALSE) ์ผ ๊ฒฝ์ฐ ์๋ else์ ๋ธ๋ก ๋ด๋ถ ์ฝ๋๊ฐ ์คํ ๋ฉ๋๋ค.
๋ํ, else ๋ด๋ถ ์ฝ๋์๋ Return, break, continue, throw ๋ฑ์ ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
guard๋ฌธ์ ํฐ ์ฅ์ ์ if ๋ก ์ต์ ๋ ๋ฐ์ธ๋ฉํ์ ๋์ ๋ฌ๋ฆฌ { } ๊ดํธ ๋ฐ์์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ๊ฒ ์ ๋๋ค.
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํํ ๋ฐฐ์ด, ์ด์ฐจ์ ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฐฐ์ด ์ ๋ ฌํ๊ธฐ (0) | 2023.03.14 |
---|---|
[Swift] ๋ฒ์์ฐ์ฐ์ ~= (0) | 2023.02.18 |
[Swift] ์ค์ํํธ ์ง๋ฒ ๋ณํํ๊ธฐ (0) | 2023.01.25 |
[Swift] ํํ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด ์กฐ๊ฑด ๋ฃ์ด์ ์ ๋ ฌํ๊ธฐ (0) | 2023.01.24 |