Swift & iOS

[Swift] try-catch (에러 처리)

hammii 2022. 6. 22. 14:40
728x90
반응형

에러 처리란?

  • 프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정
  • 스위프트에서 런타임에 에러가 발생한 경우 이를 처리하기 위한 발생(throwing), 감지(catching), 전파(propagating), 조작(manipulating)을 지원하는 일급 클래스를 지원한다.
  • 스위프트에서 에러는 에러 프로토콜을 따르는 타입의 값으로 표현된다.
  • 에러 프로토콜은 요구 사항이 없는 빈 프로토콜이지만 오류를 표현하기 위해서는 이 프로토콜을 채택해야 한다.
  • 오류의 종류는 열거형으로 표현하는 것이 일반적이다.

 

오류를 처리하는 4가지 방법

1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법

enum PhoneError: Error {
    case unknonwn
    case batteryLow(batteryLevel: Int)
}

func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {    // throwing 함수만 오류를 전파할 수 있음
    guard batteryLevel != -1 else { throw PhoneError.unknonwn }
    guard batteryLevel >= 20 else { throw PhoneError.batteryLow(batteryLevel: 20)}
    
    return "배터리 상태가 정상입니다."
}

2. do catch 구문을 이용해서 오류를 처리하는 방법

/*
 do {
    try 오류 발생 가능 코드
 } catch 오류 패턴 {
    처리 코드
 }
 */

do {
    try checkPhoneBatteryStatus(batteryLevel: -1)
} catch PhoneError.unknonwn {
    print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batteryLevel){
    print("배터리 전원 부족 남은 배터리: \(batteryLevel)%")
} catch {
    print("그 외 오류 발생 : \(error)")
}

3. 옵셔널 값으로 오류를 처리하는 방법

let status = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status)   // Optional("배터리 상태가 정상입니다.")

4. 오류가 발생하지 않을 것이라고 확신하는 방법

let status2 = try! checkPhoneBatteryStatus(batteryLevel: 30)
print(status2)  // 배터리 상태가 정상입니다.

// batteryLevel: -1 로 하면 강제 종료됨

throwing 함수가 에러를 던져주지 않을 것이라고 확신할 때 사용한다.

 

 

 

출처: [패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online.

 

728x90
반응형