iOS 개발일지
1103 새싹 84회차 정리 - Subscript, COW, Generic 본문
iOS 앱 개발자 데뷔 과정 84회차
#1. Memo
- Subscript
특정 멤버의 엘리먼트에 간단하게 접근할 수 있는 문법으로, 클래스, 구조체, 열거형 등에서 직접 정의해 사용할 수 있다.
하나의 타입에 여러 스크립트를 정의하거나, 오버로드해 Computed Property를 활용하여 정의한다.
참고 : indices 는 컬렉션을 순회할 때 사용하는 인스턴스 프로퍼티이다.
- Copy On Write
Collection Type (Array, Dictionary, Set) 등에서 복사가 이루어질 때, 실제로 복사를 하지 않고 원본 (메모리) 을 공유하다가 원본 또는 복사한 곳에서 수정이 일어나게 될 경우에 실제로 복사하는 작업을 말한다.
값에 대한 수정이 발생하지 않는다면, 같은 메모리를 공유하고 있기 때문에 성능을 향상시킬 수 있다.
- API 코드 개선 (feat. Generic & Meta Type)
기존 문법 내용을 최대한 예시인데, 조금 헷갈릴 만한 부분은 역시 제네릭일 것 같다. 33회차 Generic 참고
<T: Decodable> 으로 제네릭을 선언하고 프로토콜 제약을 설정해, 디코딩이 가능한 타입만 받을 수 있도록 구현했다.
이제 type 파라미터를 통해 T의 구체적인 타입을 받아와야 한다.
T 가 인스턴스가 아닌 타입 그 자체라는 것을 명시하기 위해 type 프로퍼티의 타입을 T.Type 라고 작성했다.
이를 타입의 타입, 메타 타입이라고 한다. 36회차 Meta Type 참고
메타타입으로 선언된 프로퍼티나 파라미터에는 메타타입의 인스턴스가 들어갈 수 있다.
따라서 아래의 ProfileViewModel에서 호출 시 Profile이 아닌 Profile.self 가 들어가는 것이다.
이해하기 쉽도록 일반적인 코드로 예시를 들면, let a: Int = 5 에서 a의 타입은 Int이고 5는 Int의 인스턴스가 된다.
이걸 그대로 메타타입으로 바꾸기만 하면, let a: Int.Type = 5.self 가 된다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
SeSAC iOS 데뷔과정 2기 액기스 정리!! (1) | 2023.01.09 |
---|---|
1102 새싹 83회차 정리 - API 통신 로그인 (0) | 2022.11.02 |
1101 새싹 82회차 정리 - RxSwift Input/Output (0) | 2022.11.01 |
1031 새싹 81회차 정리 - RxAlamofire, RxDataSources (0) | 2022.10.31 |
1027 새싹 79회차 정리 - RxSwift Share (0) | 2022.10.27 |