Open Do-hyun-Kim opened 1 year ago
@frozen
enum Result<Success, Failure> where Failure : Error
Result 타입은 Generic Enumeration로 선언되어 있으며 연관값을 포함하여, 성공(success)과 실패(failure)를 나타내는 타입이다.
@frozen enum Result<Success, Failure> where Failure : Error {
case success(Success)
case failure(Failure)
}
기존에 에러를 처리하기 위해 throw
와 do-catch
, completionHandler 을 사용하였으며, 이로 인해 성공과 실패에 대한 결과값을 아래처럼 제공하게 된다.
위와 같은 비유동적인 코드 작성과, 가독성의 개선을 위해 Result 타입을 사용한다. Result 타입은 아래의 두가지에 대한 결과값만 제공한다.
let task = URLSession.shared.dataTask(with: url) { result in
switch result {
case .success(let data):
// Handle successful response data
...
case .failure(let error):
// Handle error
...
}
Result타입에 대해 설명하시오.
Result
Type은 Swift 5에서 부터 Standard Library에 추가된 Type 이다.Result
Type은Genenric Enumeration
으로 선언되어 있으며,sucess
,failure
두가지case
를 포함하는 타입이다.Result
Type에서sucess
는 별도의 제약조건을 가지고 있지 않지만,failure
같은 경우Error Protocol
을 채택한 타입이어야만 한다.Result
Type은 오직 성공과 실패에 대한 반환 값을 사용하고 싶은 경우에 사용한다. 즉 서버 통신에 대한 결과 값에 많이 사용한다.Success
타입에는 모든 타입을 반환 할 수 있다.Result 타입을 사용한 에러 처리
Error
Type의 Protocol을 채택한 열겨형을 정의하여 명시적으로 반환 할 수 있다.Result
를 사용하면 별도의 타입 캐스팅 과정을 생략 할 수 있으며,Error
타입을 명시적으로 반환 하기에 코드의 안정성을 확보 할 수 있다.do - try + catch
구문을 사용하여 에러 처리를 하지 않고Result
Type을 통해 에러 처리를 할 수 있다.Result
Type은 에러 핸들링을 중점적으로 기능을 선보이는 것 같다.📝 참고 사이트