Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Algorithm
- Clean Architecture
- Swift공부
- dfs
- Python
- BFS
- Level 1
- 정렬
- 공부
- UIKit
- 앱개발
- 안드로이드 공부
- 파이썬 풀이
- Autolayout
- 오토레이아웃
- 파이썬
- 그리디 알고리즘
- Android
- 백준 온라인 저지
- SwiftUI
- Kotlin
- 백준온라인저지
- ios
- 알고리즘 공부
- swift
- error
- 프로그래머스
- greedy algorithm
- 알고리즘
- iOS개발
Archives
- Today
- Total
Tori의 개발 공부
[Swift] 오류처리 - throws, do-catch, try 본문
오류와 오류 처리
오류처리란 프로그램이 오류를 일으켰을 때 이것을 감지하고 회복시키는 일련의 과정이다.
오류 표현
- Error라는 프로토콜을 준수하는 타입의 값을 통해 표현한다.
- 사실상 Error프로토콜은 요구사항이 없는 프로토콜이지만, 오류를 표현하기 위해 Error프로토콜을 채택한다.
-> Error프로토콜을 채택함으로써 해당 타입이 오류 처리를 위한 타입임을 알 수 있음 - 오류를 나타내기 위한 타입으로 주로 열거형을 사용함
enum MyError:Error{
case error1
case error2
case error3
}
error프로토콜을 준수한 열거형을 하나 선언한 후 나올 수 있는 에러 유형별로 case를 나누어 작성해 준다.
오류 처리 과정
- 오류 종류를 미리 예상해 오류를 표현함
- 오류 발생 여지가 있는 곳에서 오류를 던짐(throw)
- 던저진 오류를 처리함
- do-catch문
- 옵셔널 값 처리
- 강제 처리 (오류 발생하지 않음을 확신하고 처리)
오류 던지기(throws)
- 함수, 메서드, 이니셜라이저 등의 매개변수 뒤에 throws키워드를 작성하면 해당 func은 오류를 던질 수 있다.
ex) func canThrowErrors() throws -> String - throws키워드를 명시한 함수 안에서 오류를 던지는 부분에서 throw키워드를 사용하여 오류를 던짐
- guard문을 사용해 빠른 종료를 함
func canThrowErrors() throws -> String{
...
//오류 던지는 부분
guard 조건 else {
throw MyError.error1
return
}
...
}
해당 함수에서 조건에 맞지 않으면 error1 오류를 던지고 함수를 종료시킨다.
이제 던져진 오류를 받아 적절한 방법을 사용하여 처리해주기만 하면 된다.
오류 처리하기
오류를 포함하는 함수를 실행할 때 try를 사용한다. 즉 try로 던져진 오류를 받아 처리한다.
do - catch 구문
do{
try canThrowError() //오류 발생 가능 코드
오류 발생 안할 시 실행할 코드
}catch error1{
error1발생 시 처리 코드
}catch error2{
error2발생 시 처리 코드
}
// switch문과 함께 사용
do {
try ...
}catch{
switch error {
case error1
case error2
}
}
do 구문 안에 try 오류 발생 가능 코드를 써주고 밑에는 오류가 아닐 시 실행 할 코드를 적어준다.
catch문을 통해 오류 타입별 처리 코드를 적어준다.
catch문을 하나로 묶어 안에 switch문과 같이 사용하여 오류를 처리할 수 있다.
catch문에서 오류 전달인자를 따로 지정하지 않으면 암묵적으로 error라는 변수명으로 오류가 들어온다. 따라서 switch문에서 따로 error라는 변수를 선언하지 않았음에도 위처럼 사용할 수 있게 된다.
옵셔널 값으로 오류 처리
- try? 문을 사용하면 동작 코드가 오류를 던지면 nil을 반환하고 오류가 발생하지 않으면 결괏값을 옵셔널로 반환한다.
- 예를 들어 오류를 던지는 A함수가 존재하고 A의 반환타입이 String일 경우 try? A() 시
- 오류 발생 : nil 반환
- 오류 발생 X : Optional <String> 타입의 함수 실행 결과 값을 반환
강제 처리 (오류가 발생하지 않는다고 확신하는 경우)
- try! 문을 사용한다.
- 이는 오류를 발생하지 않는다고 확신하는 경우 사용하며, 만약 오류가 발생하는 경우 런타임 오류가 발생한다.
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] 프로토콜 지향 프로그래밍 - 프로토콜 초기 구현 (0) | 2023.05.06 |
---|---|
[Swift] 고차함수 - map, filter, reduce (0) | 2023.04.12 |
[Swift] 프로토콜 - 프로토콜 구현, 채택, 클래스 전용 프로토콜 (0) | 2023.04.11 |
[Swift] 타입캐스팅 - is, as 연산자 (0) | 2023.04.11 |
[Swift] 옵셔널 체이닝과 nil 병합 연산자 (0) | 2023.03.31 |