์๋ ํ์ธ์, ๊ฐ์์ ๋๋ค! swift์ ์กฐ๊ฑด๋ฌธ์ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋น์ทํ๊ฒ if, switch๊ตฌ๋ฌธ์ด ์์ต๋๋ค. ํ์ง๋ง ์ฝ๊ฐ์ ์์ํ ์ ์๋ guard ๋ฌธ์ด ์๋๋ฐ์, ์ด์ ๋ํด์ ์์ธํ ๊ณต๋ถํด๋ณด๊ณ ์ ํฉ๋๋ค. ๊ทธ๋ผ ์์ํด๋ณด๊ฒ ์ต๋๋ค.
guard ๊ตฌ๋ฌธ
์ฐ์ guard๊ตฌ๋ฌธ์ ํจ์๋ ๋ฉ์๋, ๋ฐ๋ณต๋ฌธ ๋ฑ ๋ธ๋ก ๋ด๋ถ์ ์ ์ธํ๊ฒ ๋๋ค. ๋๋ฌธ์ ํจ์์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋ ์ฉ๋๋ก๋ ๋ง์ด ์ฌ์ฉ๋๋ค๊ณ ํ๋ค. guard๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ํํ๋ ์๋์ ๊ฐ๋ค.
guard ์กฐ๊ฑด else {
//์กฐ๊ฑด์ด false๋ฉด ์คํ
return || throw
}
guard๋ฌธ์ ์กฐ๊ฑด์ด ํ๋ฆฐ ๊ฒฝ์ฐ๋ ๋ชจ๋ ๋ฒ๋ฆฌ๊ณ , ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์กฐ๊ฑด๋ง ํต๊ณผ์ํค๊ฒ ๋ค๋ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ๋๋ค. if๋ฌธ๊ณผ์ ์ฐจ์ด์ ์ผ๋ก ๋ณด๋ฉด if๋ฌธ์ '~๋ฉด ~ํด๋ผ' ์ ์คํ ๊ตฌ๋ฌธ์ด์ง๋ง, guard๋ '~์๋๋ฉด ๋๋ด๋ผ' ๋ผ๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ guard๋ฌธ์ '๋น ๋ฅธ ์ข ๋ฃ'์ ํต์ฌ์ด๋ผ๊ณ ํ๋ค.
์ดํด๊ฐ ์ ๋์ง ์๋๋ค. ์์ ๋ก ์ดํด๋ณด์.
func test() {
let condition1: Bool = true
let condition2: Bool = true
guard condition1, condition2 else {
return print("bye")
}
print("come in")
}
test()
// prints "come in"
// ๋ ์กฐ๊ฑด์ด ๋ชจ๋ true์ด๋ฏ๋ก guard ๋ด๋ถ ์คํ๋ฌธ์ ์คํ๋์ง ์์๋ค.
guard๋ฌธ์ ์กฐ๊ฑด์ด ๋ง์ง ์์ผ๋ฉด ์ข ๋ฃ์์ผ์ผํ๋๋ก ๋ฌธ๋ฒ์ ํฌํจ์์ผ์ผ ํ๋ค. ๋๋ฌธ์ ๋ฐ๋์ return ์ด๋ throw๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
guard ๊ตฌ๋ฌธ์ ํ๊ณ์ ๊ณผ if ๊ตฌ๋ฌธ๊ณผ์ ์ฐจ์ด์
โถ guard๊ตฌ๋ฌธ์ ํจ์๋ ๋ฉ์๋ ํน์ ๋ฐ๋ณต๋ฌธ ์์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ํ๊ณ์ ์ด ์๋ค.
์๋ ๋ ์ฝ๋๋ ๊ฐ์ ๋์์ ์คํํ๋ guard๊ตฌ๋ฌธ๊ณผ if๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ฝ๋์ด๋ค.
for i in 0...3 {
if i == 1 { print(i) }
else { continue }
}
for i in 0...3 {
guard i == 1 else { continue }
print(i)
}
0๋ถํฐ 3๊น์ง ๋ฐ๋ณตํ๋ฉด์ i๊ฐ 1์ด๋ฉด ์ถ๋ ฅํด์ฃผ๋ for-in ๊ตฌ๋ฌธ์ด๋ค. ํด๋น ์ฝ๋์์๋ i๊ฐ 1์ผ ๊ฒฝ์ฐ์ธ ๋จ ํ ๊ฐ์ง์ ์์ธ๋ง ์ฒ๋ฆฌํ๋ฉด ๋๋ ์ฝ๋์ด๋ค. ์ด๋ ๊ฒ ์์ธ์ฌํญ์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ guard๊ตฌ๋ฌธ์ ์ ์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ์ ์ else ๊ตฌ๋ฌธ์ ์๋ contniue์ด๋ค. continue๋ฅผ ์ฌ์ฉํ๋ฏ๋ก์จ ์์ธ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ, ์ฝ๋ ๋ธ๋ก ๋ฐ๋ณต์ ์ข ๋ฃ๋ฅผ ์ ์ธํ ์ ์์๋ค. continue์ด์ธ์๋ ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น๋ฌธ์ผ๋ก return, break, throw ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น๋ฌธ์ ํจ์, ๋ฐ๋ณต๋ฌธ, ๋ฉ์๋ ์์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ฌ์ฉํ ์ ์๋ค. guard๋ ๊ตฌ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ์ข ๋ฃ์ํค๋ ๋ฌธ๋ฒ์ ๋ฐ๋์ ํฌํจํด์ผํ๋ฏ๋ก, ์ ์ด๋ฌธ ์ ํ ๋ช ๋ น๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ํ๊ณ๊ฐ ๋ถ๋ช ํ ์กด์ฌํ๋ค.
guard๋ฌธ์ ์ฌ์ฉํ๋ ์ด์
โถ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
์ฌ์ค ์์ง ๊ทธ๋ด๋ฏํ ์ฝ๋๋ฅผ ์ง๋ณธ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ๊ณต๊ฐํ์ง ๋ชปํ๋ค. ํ์ง๋ง if๋ฌธ๊ณผ ๋น๊ตํด์ guard๋ฌธ์ ์ดํด๋ณด์์ ๋ ์์ฃผ ๊ฐ๋ ์ฑ์ด ์ข์์ง์ ๋๊ผ๋ค. ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ guard๋ฌธ์ ์ ํ์ฉํ๋ฉด ์ข์ ์ฝ๋๊ฐ ๋ ๊ฒ๊ฐ๋ค.
- if๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
func solution() {
if condition1 {
if condition2 {
if condition 3 {
print("come in")
} else {
print("bye")
}
} else {
print("bye")
}
} else {
print("bye")
}
}
// ์ธ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ด๋ฉด come in, ํ๋๋ผ๋ ๊ฑฐ์ง์ด๋ฉด bye๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
์กฐ๊ฑด๋ฌธ์ ์กฐ๊ธ ๋ ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์์ง๋ง ์ผ๋จ ์ด๋ ๊ฒ๋ ๋ณต์กํด(?)๋ณด์ธ๋ค. ์ด๋ฅผ guard๋ฌธ์ผ๋ก ์์ฑํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น.
func solution() {
guard condition1 else { return print("bye") }
guard condition2 else { return print("bye") }
guard condition3 else { return print("bye") }
print("come in")
}
์กฐ๊ฑด์์์ else๋ฅผ ๋ฌ์๊ฐ๋ฉฐ ๋ถ์ ์ ์ธ ์กฐ๊ฑด์์ผ๋ก ๊ฒ์ฌํ๋ ๊ฒ๋ณด๋ค ์ํํ๋๋ฐ ํ์ํ ์กฐ๊ฑด์ ๊ทธ๋๋ก ์ ๋๋ค๋ ์ ์์ ํจ์ฌ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
๋ง๋ฌด๋ฆฌ
๋ค์ ๊ธ์์๋ guard let ๊ตฌ๋ฌธ๊ณผ if let๊ตฌ๋ฌธ์ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ๋ํด์ ํฌ์คํ ํด๋ณด๊ฒ ๋ค.