### Result type - Result type은 swift standard library에 구현되어있는 ```열거형 데이터타입```이다. success와 failure 두 가지 경우로 나뉘어(switch와 잘 맞음) value를 저장한다. ```swift @frozen enum Result<Success, Failure> where Failure : Error ``` 공식 문서에 정의된 내용을 살펴보면, Failure는 ```Error 프로토콜```을 채택하고있어 ```do-catch문```과 유사하게 오류처리가 가능하다는 특징이 있다. <br/> **💭 예제를 활용한 이해** ```swift enum ValueError: Error { case underFive } var resultArray: [Result<String, Error>] = [] func upTest() throws -> String { var randomInt = Int.random(in: 0...9) if randomInt >= 5 { return "up" } else { throw ValueError.underFive } } for _ in 0...9 { let sample = Result { try upTest() } resultArray.append(sample) } for count in 0...9 { switch resultArray[count] { case .success(let answer): print(answer) case .failure(let error): print(error) } } ``` 이해를 돕기 위해 예제 코드를 작성해봤다. 1. 오류 열거형 ValueError 2. resultArray에 Result타입을 element로 갖는 빈 Array를 할당해줌 3. upTest라는 오류를 던져주는 함수 작성 -> 랜덤한 0~9 사이의 숫자를 뽑아 5이상일 경우 return "up" / 5미만일 경우 throw 4. 반복문을 통해 resultArray에 ```try upTest()```의 결과를 append -> return "up"일 경우 sample은 success에 "up"을 저장. -> throw ValueError.underFive의 경우 sample은 failure에 해당 오류 저장 -> 이후 sample이 Array element로 할당됨 5. resultArray의 element 각각에 접근하여 switch-case 구문으로 해당 element 값을 출력. <br/> 랜덤으로 sample을 얻어냈기 때문에 실행할 때마다 같은 결과를 얻진 못했지만, Result의 활용법과 타입 자체 개념에 대해 이해하는데 도움이 되었다. 결과적으로 Result 타입은 failure에 Error를 value로 저장하고, success에 Error가 발생하지 않았을 때 얻어낸 값을 value로 저장하는 것으로 이해했다. (저장된 값들은 switch문을 통해서 접근이 가능하다.) 특히 ```Result { try someFuction() }```의 형식으로 사용이 가능하다는 점이 신기했고, 이를 적용하니 숫자야구게임 코드의 가독성이 올라갔다고 생각한다. 참조 1. [Apple Developer Documentation - Result](https://developer.apple.com/documentation/swift/result) 참조 2. [Apple Developer Documentation - Preserving the Result of a throwing expression](https://developer.apple.com/documentation/swift/preserving-the-results-of-a-throwing-expression)