์ต์ ๋ ํ์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ค๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ฐ๋ผ์ ์์ธ์ฒ๋ฆฌ๋ก Error๋ฅผ ํํํ๋ค.
-
ํจ์๊ฐ ๋ฐํํ ์ค๋ฅ๋ ์ผ๊ด๋ ์ฃผ์ ์ ์ฐ๊ด๋ ๊ฒฝ์ฐ (๋ฌธ์์ด์ด ์์ ๋, ๋ฌธ์์ด ํฌ๊ธฐ, ๋ฌธ์์ด ํ์, ๋ฌธ์์ด ํฌ๋งท ํ์ ๋ฑ์ ์ฒดํฌ)
-
์ผ๊ด๋ ์ฃผ์ ๋ฅผ ํํํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ๊ฒ์
enumํ ํ์
// enumํ์ผ๋ก errorํ์
๋ช
์ ์ (ํ๋กํ ์ฝ์ ๊ตฌํํ ๊ฒ์ ์ค๋ฅ ํ์
์ผ๋ก ์ฌ์ฉํ๋ผ๋ ์ผ์ข
์ ๊ฐ๋
์ฑ ํ์)
enum DateParseError : Error {
case overSizeString
case incorrectData(part: String)
}-
์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ํํ :
throwsํค์๋ -> (๋ฐํtype) -
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ํํ : throw์ ์ค๋ฅ๋ช ํ์ (return๊ณผ ์ ์ฌ)
// ์ค๋ฅ๊ฐ ๋๋ ์กฐ๊ฑด์ throws์ ํจ๊ป ๋ฐฐ์น
func getNextYearAndThrows(paramYear: Int) throws -> Int {
guard paramYear <= 2020 else {
throw DataError.overSizeYear
}
guard paramYear >= 0 else {
throw DataError.incorrectData(part: paramYear)
}
return paramYear+1
}-
๋ง์ง๋ง catch์ ์ค๋ฅํ์ ์ ์์ฑํ์ง ์์ผ๋ฉด default๋ฌธ์ผ๋ก ๋จ
-
try!: ํจ์ ๊ฐ์ ์คํ (๋ฐํ์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ) -
try?: ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด nil ๋ฐํ, ๋ฐ์ํ์ง ์์ผ๋ฉด optional ํ์ ์ผ๋ก ๋ฐํ
func getNextYear(paramYear: Int) -> Int {
var year: Int = 0
do {
year = try getNextYearAndThrows(paramYear: paramYear)
} catch DataError.overSizeYear {
print("๋
๋ ์ด๊ณผํด์ ์
๋ ฅํ์์ต๋๋ค")
} catch DataError.incorrectData(let part){
print("์
๋ ฅํ ๊ฐ์ด \(part)์ด๋ฏ๋ก ์ค๋ฅ์
๋๋ค.")
} catch {
print("default error catch")
}
return year
}
let a = getNextYear(paramYear: -999) // ์
๋ ฅํ ๊ฐ์ด -999์ด๋ฏ๋ก ์ค๋ฅ์
๋๋ค.์ ๋ฆฌ
์ค๋ฅ๊ฐ ๋๋ ์กฐ๊ฑด์ ๋ฐ๋ก ํจ์๋ก ์์ฑ (throws, throw)
์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ๋ฌธ์ ์ง์ ํจ์๋ฅผ ์ด์ฉํ๋ ๊ณณ์์ ์ฒ๋ฆฌ (do - try - catch)
// enumํ์ผ๋ก errorํ์
๋ช
์ ์
enum DataError : Error { // Error ํ๋กํ ์ฝ์ ๊ตฌํํ ๊ฒ์ ์ค๋ฅ ํ์
์ผ๋ก ์ฌ์ฉํ๋ผ๋ ์ผ์ข
์ ๊ฐ๋
์ฑ ํ์
case overSizeYear
case incorrectData(part: Int)
}
// ์ค๋ฅ๊ฐ ๋๋ ์กฐ๊ฑด์ throws์ ํจ๊ป ๋ฐฐ์น
func getNextYearAndThrows(paramYear: Int) throws -> Int {
guard paramYear <= 2020 else {
throw DataError.overSizeYear
}
guard paramYear >= 0 else {
throw DataError.incorrectData(part: paramYear)
}
return paramYear+1
}
// ์ค์ ๋ก ์์ฉํ๋ก๊ทธ๋จ์์ ๋ถ๋ฌ์ฌ ํจ์
func getNextYear(paramYear: Int) -> Int {
var year: Int = 0
do {
year = try getNextYearAndThrows(paramYear: paramYear)
} catch DataError.overSizeYear {
print("๋
๋ ์ด๊ณผํด์ ์
๋ ฅํ์์ต๋๋ค")
} catch DataError.incorrectData(let part){
print("์
๋ ฅํ ๊ฐ์ด \(part)์ด๋ฏ๋ก ์ค๋ฅ์
๋๋ค.")
} catch {
print("default error catch")
}
return year
}
let a = getNextYear(paramYear: -999) // ์
๋ ฅํ ๊ฐ์ด -999์ด๋ฏ๋ก ์ค๋ฅ์
๋๋ค.โ-
try: ์์ธ ๋ฐ์์ catch๋ก ์์ธ ์ ๋ณด ๋์ง๋ฉฐ, ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ ์ธ๋ํ๋ ๊ฐ ๋ฐํ -
try!: ์์ธ ๋ฐ์์ runtime error, ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ ์ธ๋ํ๋ ๊ฐ ๋ฐํ (nil๊ฐ์ด ๋์ค์ง ์์์ ํ์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ) -
try?: ์์ธ ๋ฐ์์ nil ๋ฆฌํด, ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ ์ต์ ๋ ๊ฐ ๋ฐํ