네트워크 통신 수행의 결과는 성공 또는 실패 중 하나이다. 그렇기 때문에 생겨난 타입이라고 볼 수 있다.
@frozen public enum Result<Success, Failure> where Failure : Error {
/// A success, storing a `Success` value.
case success(Success)
/// A failure, storing a `Failure` value.
case failure(Failure)
}
@frozen : 케이스가 더이상 추가되지 않을 것을 컴파일러에게 알려서 성능 향상
6. Error
Error는 Sendable을 채택하는 프로토콜 타입이다.
일반적으로 통신시에 발생할 수 있는 에러의 종류는 다양하기 때문에, Error를 채택하여 Custom한 Error타입을 정해주는 것이 좋다.
열거형과 엮어서 사용해볼 수 있다.
범용적으로 발생할 수 있는 에러도 추가해볼 수 있다. (Offline 상태)
enum SeSACError: Int, Error {
case invalidAuthorization = 401
case takenEmail = 406
case emptyParameters = 501
}
extension SeSACError: LocalizedError {
var errorDescription: String? {
switch self {
case .invalidAuthorization:
return "토큰이 만료되었습니다. 다시 로그인 해주세요."
case .takenEmail:
return "이미 가입된 회원입니다. 로그인 해주세요."
case .emptyParameters:
return "필요한 정보가 없습니다."
}
}
}
guard let error = SeSACError(rawValue: statusCode) else { return }
7. 캐시
shorturl.at/ryY05
캐시 종류
속도와 용량 측면에서 차이가 있기 때문에 적절한 사용 필요
캐시 메모리(메모리 캐시)
디스크 캐시
8. RxSwift
Single Traits : 개념 자체는 어렵지 않다. 그런데 구조적인 측면에서 활용하는게 감이 잘 안와서 좀 헤맸다.
subscribe, bind, drive
Driver vs Signal
9. Copy on Write (CoW)
실제 값의 수정 또는 삭제 등 변경이 발생했을 때 메모리 주소가 달라진다.
Collection 타입(Array, Dictionary, Set)에 대해서 성능 최적화 제공
- 내가 보기 위해 메모하는 키워드(너무 자세하게 적으려고 부담갖지 말기) - 이미 알고 있는 내용이더라도 적고 다시 생각하고 의문점 갖기
1. Alamofire 중복 코드 개선하기
2. Generic Type
3. Meta Type
4. Escaping Closure/Auto Closure
5. Result Type
6. Error
7. 캐시
캐시 종류
8. RxSwift
9. Copy on Write (CoW)
10. 서브스크립트(Subscript)
String에서 쓰면 유용할 것으로 생각함(특히 코테)
11. 지켜보자