Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

1103 새싹 84회차 정리 - Subscript, COW, Generic 본문

SeSAC iOS 데뷔과정 2기

1103 새싹 84회차 정리 - Subscript, COW, Generic

Lia's iOS 2022. 11. 3. 21:24
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 가 된다.