[iOS] Result 타입은 무엇인가

유인호·2024년 5월 8일
0

iOS

목록 보기
44/64

0. 서론

개발 속도를 빠르게 함에 있어서 가장 중요한건 실수를 줄이는것 일것이다. 애플도 그걸 잘 알고있는지, Swift5에 새로운 에러 처리 방법을 소개하였다.

1. Result가 도입된 계기

URLSession등으로 데이터를 받을때, request 클로저 내부에 return문을 사용할 순 없으므로 보통 CompletionHandler라는 escaping 클로저를 사용하여 데이터를 빼왔다. 이때 클로저에

(값) -> Void

이런식으로 하면 옵셔널 없이 값을 빼내올 수 있겠지만, 에러처리가 불가능하다는 단점이 있다. 그리하여 꼼수를 써서 에러처리를 하게 되는데..

(값?, 에러?) -> Void

이런식으로 하면 값이 나올땐 (값, nil)을 클로저에 담아 보내면 되고, 에러가 나올떈 (nil, 에러)를 실어서 보내면 될 것이다.

그러나, 이방법은 치명적인 단점이 있다.

(nil, nil)

이런식으로 값을 전달해도, 문법상 아무런 문제가 없다는 점 이겠다.

이 점을 해결하기 위해 Result타입이 등장했다.

2. 그래서 Result타입이 뭐임?

enum Result<Success, Failure: Error> {
    case success(Success)
    case failure(Failure)
}

Result타입을 보면 알 수 있지만, 오직 성공과 실패밖에 없다. 성공의 경우 제네릭구조에 제약이 없어 아무거나 다 들어갈 수 있지만, 실패는 Error프로토콜을 만족해야만 들어갈 수 있다. 이것을 활용하게 된다면 이런식으로 활용이 가능할 것이다.

(Result<값,에러>) -> Void

이렇게 전달하게 되면 값,에러 중에 하나는 무조건 들어가 있기 때문에 (nil, nil)같은 참사를 방지할 수 있고, switch문을 통해서 간편하게 분기처리 할 수 있을 것이다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글