[swift] try?과 try!의 차이점과 적절한 사용 방법
Swift에서 try?
과 try!
은 두 가지 다른 에러 처리 방법을 제공합니다. 이 두 연산자는 에러를 처리하는 방식과 프로그램의 동작에 중요한 영향을 미치므로 올바르게 이해하고 사용하여야 합니다.
try?의 사용
try?
연산자는 에러가 발생할 수 있는 코드 블록 내에서 사용됩니다. 이 연산자를 사용하면 에러가 발생하면 결과값이 nil
이 됩니다. 따라서 에러를 무시하고 코드를 계속 실행하며, 함수나 메서드의 반환 값은 옵셔널 타입으로 처리됩니다.
func fetchData() -> Data? {
guard let fileURL = URL(string: "example.json") else {
return nil
}
do {
let data = try Data(contentsOf: fileURL)
return data
} catch {
return nil // 에러가 발생하면 nil을 반환
}
}
위 예제에서 try?
를 사용하여 Data(contentsOf:)
메서드를 호출하였기 때문에, 에러가 발생할 경우 nil
을 반환합니다.
try!의 사용
반면에 try!
연산자는 같은 코드 블록 내에서 사용되지만, 에러가 발생할 경우 런타임 에러가 발생하며 프로그램이 중지됩니다. 이 연산자는 에러를 무시하거나 처리하지 않고 무조건 실행하는 것을 나타내므로 주의해서 사용하여야 합니다.
func fetchData() -> Data {
guard let fileURL = URL(string: "example.json") else {
fatalError("Invalid file URL")
}
do {
let data = try Data(contentsOf: fileURL)
return data
} catch {
fatalError("Error while fetching data: \(error)")
}
}
위 예제에서 try!
를 사용하여 Data(contentsOf:)
메서드를 호출하였기 때문에, 에러가 발생하면 런타임 에러가 발생하여 프로그램이 중지됩니다.
언제 어떤 것을 사용해야 하는가?
try?
는 일반적으로 에러가 발생해도 괜찮고, 에러 상황을 무시하고 싶을 때 사용합니다.try!
는 프로그램이 계속 실행되도록 보장되어 있고, 코드 블록 내에서 에러가 발생하지 않는다는 것을 확신할 때만 사용해야 합니다.
이러한 차이점을 잘 이해하고 상황에 맞게 적절하게 사용하여야 합니다.
자세한 내용은 The Swift Programming Language - Error Handling를 참고하세요.