뤼졸ㅌ #8
YoonAh-dev
started this conversation in
Show and tell
뤼졸ㅌ
#8
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Result
우리는 Error를 비동기적으로 처리하기 위해서 이렇게 사용했습니다.
이런 방식으로 에러를 처리할 때는 문제점이 존재합니다.
문제점
위의 코드에서 우리가 처리하고자하는 실행 결과는 두가지입니다.
하지만 위의 경우에는 총 네 가지의 가짓수가 나타날 수 있습니다.
대체로 일어나는 결과는 2, 3번 행이지만 1, 4번같은 상태도 나타날 수 있는 것이죠.
Swift5에서 Result를 이렇게 정의합니다.
위 코드를 Result를 이용해서 바꿔보면
Result
를 사용하면 모호한 상태를 처리할 필요가 없고 꼭 필요한 상태만 처리하면 되다보니 명시적이고 간결하게 에러처리를 할 수 있게 됩니다.Result 변형
Type Errors
앞에 있는 예시들처럼 코드를 썼을 때에 Error프로토콜을 따르는 모든 형태가 에러가 될 수 있습니다. 이 때는 어떤 에러가 발생했는지 정확하게 파악이 어렵기 때문에 에러를 안전하고 정확하게 처리하기 위해서 연관된 에러를 정의해 사용할 수 있습니다.
에러가 발생하면 정의한 에러의 종류에 따라 처리할 수 있습니다.
Throw 처리
Switch를 사용하지 않고
try
do
catch
에서 직접 결과값을 받아서 처리하고 싶을 때가 있습니다. 이런 경우 성공시 결과값을 반환하고 실패했을시에는throw
를 뱉도록 처리 가능합니다.지연 처리(Delayed Error Handling)
에러 처리를 나중에 하고 싶을 때 Result를 이용하면 클로저를 초기화 파라미터로 사용해서 코드를 간결하게 작성할 수 있습니다.
Result 타입에는 throwing closure를 받는 초기자가 있습니다. 클로저가 값을 성공적으로 반환하면 success case에서 그 값을 연관값으로 저장하고 그렇지 않으면 throw된 에러를 failure case의 연관값으로 저장합니다.
Result 변형
Result 자체에서
map()
flatMap()
mapError()
flatMapError()
함수를 지원합니다.get() 메서드 사용
Result 타입에는 get() 메서드가 있습니다. 메서드는 성공한 값이 있으면 반환하고 그렇지 않으면 에러를 throw합니다. get() 메서드를 사용하면 Result 타입 사용을 일반적인 예외 던지기로 변환할 수 있습니다.
[Swift] Result 타입](https://jusung.github.io/Result-%ED%83%80%EC%9E%85/)](https://jusung.github.io/Result-%ED%83%80%EC%9E%85/)
Result 타입](https://tech.burt.pe.kr/swift/what-new/swift-5.0/result-type)
Beta Was this translation helpful? Give feedback.
All reactions