์ค์ํํธ์๋ if์ ๋น์ทํ ์ญํ ์ ํ๋ guard๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋ค,,!
์ง๊ธ๊น์ง๋ guard๋ฅผ ์ฌ์ฉํด์ผ ํ ํ์์ฑ์ ๋๋ผ์ง ๋ชปํด ๊ณต๋ถํ์ง ์์๋๋ฐ, ์ด์ ์๋ ๊ตฌ๋ฌธ์ด ์กด์ฌํ ๋ฆฌ๋ ์๋ค.
์ค๋์ ์ต์
๋ ๋ฐ์ธ๋ฉ์ ๋ํด ๊น์ด์๊ฒ ๊ณต๋ถํด๋ณด๋ค๊ฐ guard ๊ตฌ๋ฌธ์ ์ข์ ์ธก๋ฉด์ ์๊ฒ ๋์ด
guard๊ฐ ๋ฌด์์ธ์ง, ์ธ์ ์ฌ์ฉํด์ผ ํ ์ง, if์๋ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๋ฑ์ ์์๋ณด๋ คํ๋ค.
๐ guard
guard๋ '๋น ๋ฅธ ์ข ๋ฃ'์ ํต์ฌ ํค์๋์ด๋ค.
if ๊ตฌ๋ฌธ์ "~๋ฉด ~ํด๋ผ!" ๋ผ๋ ์๋ฏธ์ด์ง๋ง,
guard ๊ตฌ๋ฌธ์ "~์๋๋ฉด ๋๋ด๋ผ!" ๋ผ๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ์ guard ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ ํํ๋ฅผ ๋ณด์.
// ํจ์๋ ๋ฉ์๋, ๋ฐ๋ณต๋ฌธ ๋ฑ ๋ธ๋ก ๋ด๋ถ์ ์ ์ธ
guard (Bool ํ์
๊ฐ) else {
(์์ธ์ฌํญ ์คํ๋ฌธ)
(์ ์ด๋ฌธ ์ ํ ๋ช
๋ น์ด)
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, guard๋ if์ ๊ฐ์ด Bool ํ์ ์ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๋ฐ๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ฅธ ์ ์ ํด๋น ์กฐ๊ฑด ๋ค์ ๋ฐ๋ก else๊ฐ ๋ถ๋๋ค๋ ์ ์ธ๋ฐ,
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด์๋ else ๊ตฌ๋ฌธ์ ๋ฐ๋ก ์ถ๊ฐํด์ผํ๋ if์ ๋ฌ๋ฆฌ guard๋ ํ ๊ตฌ๋ฌธ์์ ๋ฐ๋ก ์์ธ๋ฅผ ๋ค๋ฃฌ๋ค.
๐ ์กฐ๊ฑด์ด false๋ฉด else์ ํด๋นํ๋ ์ฝ๋๊ฐ ์คํ๋๊ณ ,
๊ทธ ์ฝ๋์๋ ๋ฐ๋์ ํด๋น ์ฝ๋ ๋ธ๋ก์ ์ข ๋ฃํ๋ ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น์ด๊ฐ ํฌํจ๋์ด์์ด์ผ ํ๋ค.
(์ฌ๊ธฐ์ ์ฝ๋ ๋ธ๋ก์ ์ข ๋ฃํ๋ ์ฝ๋๊ฐ ํ์๋ผ๋ ์๋ฏธ๋, guard์ ํ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ด๋ค.
์ด ๋ด์ฉ์ ์๋์์ ๋ค์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.)
๊ทธ ์์๋ก if์ guard๋ฅผ ๋น๊ตํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
๐ guard์ ํ๊ณ, if์์ ์ฐจ์ด์
์๋๋ ๊ฐ๊ฐ if์ guard๋ฅผ ์ฌ์ฉํ์๊ณ , ๊ฐ์ ๋์์ ์คํํ๋ ์ฝ๋์ด๋ค.
// 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 ๊ตฌ๋ฌธ์ ํ๊ณ์ ์ด๋ค.๐ฅ
๐ guard let ๊ตฌ๋ฌธ์ ํ์ฉํ ์ต์ ๋ ๋ฐ์ธ๋ฉ
์ด์ ์ ์ต์ ๋ ์ถ์ถ์ ๊ดํ ๊ธ์ ์ ๋ก๋ ํ ์ ์ด ์๋๋ฐ,
๊ทธ ๋๋ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ผ๋ก if let ๊ตฌ๋ฌธ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์๋ค.
ํ์ง๋ง ์ต์ ๋ ๋ฐ์ธ๋ฉ ๋ํ ์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ
๊ฐ์ด nil์ผ ๊ฒฝ์ฐ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์ผ๋ก ๋ณผ ์ ์์ผ๋ฏ๋ก
guard๋ฅผ ์ฌ์ฉํ์ ๊ฒฝ์ฐ ๋ ๋ช ๋ฃํ๊ฒ ํํํ ์ ์๋ค.
๐ if let, guard let์ ํ์ฉํ ์ต์ ๋ ๋ฐ์ธ๋ฉ ๋น๊ต
let value_1: Int? = nil
let value_2: Int? = 2
// if let ๊ตฌ๋ฌธ์ ํ์ฉํ ์ต์
๋ ๋ฐ์ธ๋ฉ
func PrintValue_if(_ v: Int?) {
if let tmp = v {
print(tmp, "์
๋๋ค.")
}
else {
print("nil ์
๋๋ค.")
}
}
// guard let ๊ตฌ๋ฌธ์ ํ์ฉํ ์ต์
๋ ๋ฐ์ธ๋ฉ
func PrintValue_guard(_ v: Int?) {
guard let tmp_g = v else {
print("nil ์
๋๋ค.")
return
}
print(tmp_g, "์
๋๋ค.")
}
PrintValue_if(value_1)
PrintValue_if(value_2)
// nil ์
๋๋ค.
// 2 ์
๋๋ค.
PrintValue_guard(value_1)
PrintValue_guard(value_2)
// nil ์
๋๋ค.
// 2 ์
๋๋ค.
์์์ ๋ณผ ์ ์๋ฏ guard let ๊ตฌ๋ฌธ์ ํ์ฉํ๋ฉด nil์ ํด๋นํ๋ ์์ธ๋ง์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ค์ผ๋ก์จ
if let ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ณด๋ค ๊น๋ํ๊ฒ ํํ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ ์ ๋ฆฌ ๐
guard๋ ์์ธ ์ฒ๋ฆฌ์ฉ ์กฐ๊ฑด๋ฌธ!
์ํฉ์ ๋ฐ๋ผ ์ ์ฌ์ฉํ๋ฉด ์ง๊ด์ ์ด๊ณ ๊น๋ํ๊ฒ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ
- ๐ ์ค์ํํธ ํ๋ก๊ทธ๋๋ฐ
- ๐ ํจ์คํธ์บ ํผ์ค ์จ๋ผ์ธ ๊ฐ์ - iOS ์ฑ ๊ฐ๋ฐ ์ฌ์ธ์ ํจํค์ง
'3๏ธโฃ Swift > Swift ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋กํผํฐ ๊ฐ๋ ์ ๋ฆฌ (1); ์ ์ฅ ํ๋กํผํฐ (0) | 2021.09.22 |
---|---|
[Swift] ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ ์ด์ , ๊ฐ ์บก์ณ(Capturing Value) (0) | 2021.09.11 |
[Swift] inout ํ๋ผ๋ฏธํฐ (0) | 2021.09.05 |
[Swift] split๊ณผ components์ ์ฐจ์ด์ (0) | 2021.08.08 |
[Swift] ๋ฐฐ์ด ๊ด๋ จ ํจ์ ์ด์ ๋ฆฌ! (2) | 2021.07.15 |
๋๊ธ