DEV_Larva
๋งค๊ฐ๋ณ์ ๋ณธ๋ฌธ
๐ง๐ป์ด๋ฒ Swift ์๊ฐ์ ๋ฐฐ์๋ณผ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ๐จ๐ป๐ป
- ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
- ํจ์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
1. ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
ํจ์์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐ์ดํฐ์์ ํจ์๋ฅผ ์๋์ํฌ ์ ์๋ค.
๋๋ก๋ ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ํ๊ธฐ์ํด ์ฌ์ฉ์ ์ง์ ์ง์ ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ณ ์ถ์ง๋ง, ๋ค๋ฅธ ๊ฒฝ์ฐ 10๋ฒ ์ค 9๋ฒ๋ง ๊ฐ์ ๊ฒ์ ์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์์ ๋ฅผ ํตํด ๋ ์์๋ณด์.
func printTimesTables(for number: Int, end: Int) {
for i in 1...end {
print("\(i) x \(number) is \(i * number)")
}
}
printTimesTables(for: 5, end: 20)
func printTimesTables(for number: Int, end: Int = 12) {
for i in 1...end {
print("\(i) x \(number) is \(i * number)")
}
}
printTimesTables(for: 5, end: 20)
printTimesTables(for: 8)
์ฌ๊ธฐ์๋ ๋ชจ๋ ๋์ ๊น์ง์ ์ซ์๋ฅผ 1๋ถํฐ ์์ํ๋ ์์์ ๊ณฑ์ ํ๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค. ์ด ์ซ์๋ ์ํ๋ ๊ตฌ๊ตฌ๋จ์ ๊ธฐ์ค์ผ๋ก ํญ์ ๋ณ๊ฒฝ๋์ง๋ง, ์๋ํฌ์ธํธ๋ ์ ์ ํ ๋ํดํธ ๊ฐ์ ์ ๊ณตํ๊ธฐ์ ์ข์ ์ฅ์์ธ ๊ฒ ๊ฐ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Swift๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ ๋ณ์์ ์ผ๋ถ ๋๋ ๋ชจ๋ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ end๋ฅผ ๊ธฐ๋ณธ๊ฐ 12๋ก ์ค์ ํ ์ ์๋ค. ํ์ง๋ง ์ง์ ํ์ง ์์ผ๋ฉด 12๊ฐ ์๋์ผ๋ก ์ฌ์ฉ๋๋ค.
์ด์ printTimesTables()๋ฅผ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํธ์ถํ ์ ์์ต๋๋ค. ์ฆ, ์ํ๋ ์๊ฐ์ ๋ํด ๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ชจ๋ ์ ๊ณตํ ์ ์์ง๋ง, printTimesTables(for: 8)๋ง ์์ฑํ๋ฉด ๊ธฐ๋ณธ๊ฐ 12๊ฐ ๋ ๋ถ๋ถ์ ์ฌ์ฉ๋ฉ๋๋ค.
2. ํจ์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
์ฐ๋ฆฐ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ค์ํ ์ค๋ฅ๋ฅผ ๋ง๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ฝ์ด ๋ค์ผ๋ ค๋ ํ์ผ์ด ์กด์ฌํ์ง ์๊ฑฐ๋ ๋คํธ์ํฌ์ ์ค๋จ์ผ๋ก ์ธํ ๋ค์ด๋ก๋ ์คํจ, ๋ฑ๋ฑ ๊ทธ์ค ๊ฐ์ฅ ๋ง์ด ๋ง๋๋ ์ค๋ฅ๋ ์๋ง ์ฝ๋ฉ ์ค์ ๋นํ๋ ์ค๋ฅ๊ฐ ์๋๊น ์ถ๋ค. ๐
์ค๋ฅ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ฝ๋๊ฐ ์ถฉ๋ ํ๊ธฐ๋๋ฌธ์ ์ด๋ฅผ ๋์ฒํ๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋จํ๊ฒ๋ ์์์ผ ํ๋ค.
์ด ์์ ์์๋ 3๊ฐ์ง์ ๋จ๊ณ๋ก ์ด๋ค์ง๋ค.
- ๋ฐ์ํ ์ ์๋ ์ค๋ฅ์ ๋ํด Swift์๊ฒ ๋ฏธ๋ฆฌ ์๋ ค์ค๋ค.
- ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ํ๋๊ทธ๋ฅผ ํ์ ํ ์ ์๋ ํจ์๋ฅผ ์์ฑํ๋ค.
- ํด๋น ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๊ฐ๋จํ๊ฒ ์๋ฅผ ๋ค์๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์๊ฐ์ ์ ํ ๋ ์์ฃผ ๋ณด๋ ๋น๋ฐ๋ฒํธ ๊ฐ๋๋ฅผ ์ค์ ํ ๋ ๋๋ฌด ์งง๊ฑฐ๋ ๋ช ํํ๋ค๋ฉด(ํํ๋ฉด) ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ํ์๋๋ ๊ฒ์ ๋ค ์ ์๋ค. ํด๋น 3๋จ๊ณ๋ ์๋์์ ํ๋์ฉ ๊น๊ฒ ์์๋ณด๊ธฐ๋ก ํ์.
1๋จ๊ณ. ์ค๋ฅ ์ ์
enum PasswordError: Error {
case short, obvious
}
๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ ์ํ๋ ๊ฒ๋ถํฐ ์์ํด๋ณด์. ์ด๋ Swift์ ๊ธฐ์กด ์ค๋ฅ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ก์ด ์ด๊ฑฐํ์ ๋ง๋๋ ๊ฒ์ ๋ปํ๋ค.
์์ ์์๋ฅผ ๋ณด๋ฉด ๋น๋ฐ๋ฒํธ์๋ ๋ ๊ฐ์ง ์ค๋ฅ๊ฐ ์๋ค๊ณ ๋ฌ๋ค. ์งง๊ฑฐ๋, ์ ํํ์ง ์๋ค. ํ์ง๋ง ์ ์๋ ๋ง ๊ทธ๋๋ก ์ ์์ผ ๋ฟ ์ฌ๊ธฐ์ ์๋ฏธ์ ๋ํด์๋ ์ธ๊ธํ์ง ์๋๋ค.
2๋จ๊ณ. ํ๋๊ทธ๋ฅผ ํ์ํ ํจ์ ์์ฑ
func checkPassword(_ password: String) throws -> String {
if password.count < 5 {
throw PasswordError.short
}
if password == "12345" {
throw PasswordError.obvious
}
if password.count < 8 {
return "์ ๋นํด์."
} else if password.count < 10 {
return "์ข์์."
} else {
return "๋งค์ฐ ์ข์์."
}
}
๋ ๋ฒ์งธ ๋จ๊ณ์์๋ ์ด์ ์์ ์ค๋ฅ ์ค ํ๋๋ฅผ ๋ฐ์์ํค๋ ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ์ค๋ฅ๋ ์ผ๋จ ํธ๋ฆฌ๊ฑฐ ๋๋ฉด ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๊ฐ์ด ์ ๋๋ก ์ ์ก๋์ง ์๊ณ ์ฆ์ ์ข ๋ฃ๋๋ค.
์ด ๊ฒฝ์ฐ ์ํธ์ ๊ฐ๋๋ฅผ ํ์ธํด์ฃผ๋ ํจ์๋ฅผ ์์ฑํ๋๋ฐ ์ํธ๊ฐ 5์ ๋ฏธ๋ง์ด๊ฑฐ๋ ๋๋ฌด ์ ์๋ ค์ง ๊ฒฝ์ฐ ๋ฐ๋ก ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ฒ ์ง๋ง ๋๋จธ์ง์ ๊ฒฝ์ฐ ์์ฐ์ค๋ฝ๊ฒ ๋์ด๊ฐ๋ค. ๊ทธ์ค์์๋ ๊ฐ ๊ธฐ์ค์ ๋ง์ถฐ ์ ๋นํ๋ค, ์ข๋ค, ๋งค์ฐ ์ข๋ค์ ๊ฐ์ด ๋ฑ๊ธ์ผ๋ก ๋ฐํํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ์ค๊ฐ์ throws๋ผ๋ ๊ฒ ๋ณด์ด๋๋ฐ ์ด๊ฒ์ ํจ์๊ฐ ์ง์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ ์ค๋ฅ๋ฅผ ๋์ง ์ ์๋ ๊ฒฝ์ฐ์ ๋ฐํ ์ ํ์ธ String ์์ throws -> String๋ผ๊ณ ํ์๋ฅผ ํด์ผ ํ๋ค.
๊ทธ๋์ ์ด ์์ ์์๋ ์ค๋ฅ๋ฅผ ํฌ์ฒํ๋ ์์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์ฌ๊ธฐ์ ํฌ์ฒ์ ํ๋๊ทธ๋ก ๋ณด์๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
3. ๊ธฐ๋ฅ ์คํ ๋ฐ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌ
๋ง์ง๋ง ๋จ๊ณ๋ ์์ ๋งํ ๊ฒ์ฒ๋ผ ๊ธฐ๋ฅ์ ์คํํ๊ณ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
Swiftํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ค์ ํ๋ฒ 3๊ฐ์ง ๋จ๊ณ๊ฐ ์กด์ฌํ๋๋ฐ
- do๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ์์ ๋ธ๋ก์ ์์.
- try๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ๋์ง๊ธฐ ํจ์๋ฅผ ํธ์ถ
- catch๋ฅผ ์ฌ์ฉํ์ฌ ๋์ง ์ค๋ฅ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ค.
let string = "12345"
do {
let result = try checkPassword(string)
print("Password rating: \(result)")
} catch {
print("There was an error.")
}
checkPassword() ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ฉด ๊ฐ์ด ๊ฒฐ๊ณผ๋ก ๋ฐํ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ํธ ๋ฑ๊ธ ๋ฉ์์ง๊ฐ ์ธ์๋์ง ์๋๋ค. ์ฆ, ์คํ์ด ์ฆ์ catch ๋ธ๋ก์ผ๋ก ์ด๋ํฉ๋๋ค.
try๋ฅผ ์ฌ์ฉํ ๋๋ do ๋ธ๋ก ์์ ์์ด์ผ ํ๋ฉฐ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํ๋ ์ด์์ catch ๋ธ๋ก์ด ์์ด์ผ ํ๋ค. ์ด๋ค ์ํฉ์์๋ try!๋ก ์์ฑ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์คํ ๋ฐ catch๊ฐ ํ์ํ์ง ์์ง๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ์ถฉ๋ํ๋ค. ์ด ๋ฐฉ๋ฒ์ ๋๋ฌผ๊ฒ ์ฌ์ฉํด์ผ ํ๋ฉฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํ๋ค.
์ค๋ฅ๋ฅผ ์ก์ ๋๋ ํญ์ ๋ชจ๋ ์ข
๋ฅ์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ catch ๋ธ๋ก์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ํน์ ์ค๋ฅ๋ ๊ฒ์ํ ์ ์๋๋ฐ ์ด๋ ์๋์ ๊ฐ๋ค.
let string = "12345"
do {
let result = try checkPassword(string)
print("Password rating: \(result)")
} catch PasswordError.short {
print("Please use a longer password.")
} catch PasswordError.obvious {
print("I have the same combination on my luggage!")
} catch {
print("There was an error.")
}
์ค๋ฅ์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ๋์์ ๊ทธ๋ฐ๋ฐ Apple์์๋ ๋ฐ์ํ๋ ๋๋ถ๋ถ์ ์ค๋ฅ๋ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ ์๋ ์๋ฏธ ์๋ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๋ค. Swift๋ ์บ์น ๋ธ๋ก ๋ด๋ถ์ ์๋์ผ๋ก ์ ๊ณต๋๋ ์ค๋ฅ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ด ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก error.localizedDescription์ ์ฝ์ผ๋ฉด ์ ํํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ ์ ์๋ค.
learning by repetition
https://www.hackingwithswift.com/100/swiftui/8
Day 8 – 100 Days of SwiftUI
Follow the 100 Days of SwiftUI and learn to build apps for free.
www.hackingwithswift.com
'iOS > Swift ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ตฌ์กฐ์ฒด (0) | 2022.08.14 |
---|---|
ํด๋ก์ & ํํ ํด๋ก์ (0) | 2022.08.08 |
ํจ์ (0) | 2022.07.23 |
๋ฐ๋ณต๋ฌธ (0) | 2022.07.15 |
์กฐ๊ฑด๋ฌธ & ์ผํญ ์ฐ์ฐ์ (0) | 2022.07.14 |