오류처리(예외처리)

JG Ahn·2024년 11월 12일

swift 심화

목록 보기
10/18
post-thumbnail

예외처리

프로그램의 안정성을 유지하고 예외 상황이 발생했을 때 프로그램이 비정상적으로 종료되는 것을 방지하기 위함

try와 do-catch

try 키워드를 사용하여 에러가 발생할 수 있는 코드를 실행하고,
에러가 발생하면 catch 블록에서 해당 에러를 처리

enum NetworkError: Error {
    case badURL(String)
    case requestFailed
}

// do, try, catch를 사용하여 에러핸들링 하는 코드
do {
    let data = try fetchData(url: "https://invalid.url")
    print("Data received: \(data)")
} catch NetworkError.badURL(let stringValue){
    print("Invalid URL.")
    print(stringValue)
} catch NetworkError.requestFailed {
    print("Request failed.")
} catch {// 위에 catch에서 잡히지 않은 모든 에러
    print("Unknown error: \(error)") 
}

throw와 throws

예외 상황이 발생했을 때 특정 오류를 던지기 위해 사용

  • throws : 함수가 에러를 던질 수 있다는 것을 명시
  • throw : 에러가 발생하면 던짐
import Foundation

// 에러를 던지는 함수(throws) 선언
// 파라미터 괄호 뒤에 throws를 입력
func fetchData(url: String) throws -> String {
    guard let url = URL(string: url) else {
        throw NSError(domain: "Invalid URL", code: 404, userInfo: nil)
    }
    return "Data"
}

try?와 try!

에러를 간편하게 처리할 수 있는 방법을 제공하며, do-catch 없이 사용 가능

  • try? (Optional try): Error가 발생한다면 nil 리턴
  • try! (Forced try): Error가 발생하지 않는다고 확실할 때 사용. 만약 Error가 발생한다면 crash 발생 (사용 ❌)
// do catch를 생략하고 try? try!를 사용 하는 방법

// try?는 에러가 발생하면 nil을 반환
let data = try? fetchData(url: "https://invalid.url")
print(data ?? "No data")  // No data 

// try!는 에러가 발생하면 크래시가 발생
let data = try! fetchData(url: "https://valid.url")
print(data)

0개의 댓글