지난 포스팅에서
컴파일 오류
,런타임 오류
에 대해 가볍게 다루어보았는데, 오늘은 그 오류를 처리하는 방법에 대해 알아보고자 합니다.
더 알고 싶으시다면 아래 링크를 참고해주세요 👻
컴파일 오류 VS 런타임 오류
에러(Error)
가 발생합니다. 에러처리(Error Handling)
입니다. 쉽게 말해, 예외사항을 처리하는 거라고 할 수 있습니다.에러처리를 위해서는 다음과 같은 3 step이 필요합니다.
맥도날드 주문 에러
타입을 정의해볼게요.enum McDonaldOrderError: Error {
case invalidSelection
case LackOfMoney
case outOfStock
}
먼저
Hamburger
구조체를 생성
struct Hamburger {
var name: String
var price: Int
var count: Int
}
현재 저의 잔액을 현재 4000원으로 설정
let myMoney = 4000
throws
키워드를 이용하여 에러를 발생시키는 함수를 정의하고,
에러가 발생하면 에러를 던질 곳에throw
를 위치시킵니다.
func OrderMcDonaldMenu(orderedMeun: Hamburger) throws {
if orderedMeun.name != "BigMac" {
throw McDonaldOrderError.invalidSelection
}
if orderedMeun.price > myMoney {
throw McDonaldOrderError.LackOfMoney
}
if orderedMeun.count == 0 {
throw McDonaldOrderError.outOfStock
}
}
주문하고 싶은 햄버거를 변수로 먼저 만들어보았습니다.
let bigMac = Hamburger(name: "BigMac", price: 4600, count: 3)
그리고 주문이 가능한 지
do-catch
문을 통해 확인해볼건데요.
- do문 내에서
try
키워드를 통해 던진 오류를 받을 수 있습니다.- catch문 내에서는 던진 오류를 어떻게 처리할 건지를 정의합니다.
do {
try OrderMcDonaldMenu(orderedMeun: bigMac)
} catch McDonaldOrderError.invalidSelection {
print("저희 매장에 주문한 메뉴가 없습니다. 메뉴이름을 다시 확인해주세요.")
} catch McDonaldOrderError.LackOfMoney {
print("메뉴를 주문하기에 고객님의 잔액이 부족합니다.")
} catch McDonaldOrderError.outOfStock {
print("현재 재고가 없어 주문이 불가능합니다.")
}
결과는...?
제가 가진 돈으로는 빅맥을 사먹을 수 없기에 위와 같은 결과가 나왔네요ㅠㅜ
600원
이나 부족하기 때문이죠😭
let myMoney = 4000
let bigMac = Hamburger(name: "BigMac", price: 4600, count: 3)
이처럼
에러처리 (Error Handling)
을 통해 예외상황이 발생했을 때,
어떻게 대처하면 좋을지를 지정하여 오류를 대비할 수 있습니다.
rethrows
defer
[공식문서] The Swift Programming Language
[블로그] 오류처리 - yagom
[인프런] 앨런 Swift문법 마스터 스쿨
혹시 틀린 사항이 있다면 언제든 지적 부탁드립니다.