티스토리 뷰

iOS/면접질문 모음

Generic 에 대해 설명하시오

malrang-malrang 2022. 7. 30. 18:24

Generic 에 대해 설명하시오

타입 혹은 함수를 정의할때 추상적인 타입을 표기하여 중복코드를 방지하고 재사용 가능한 유연한 타입과 함수를 만들수 있게 하는 것입니다.

where 절이나 protocol 명시로 추상 타입에 제약을 줄 수 있습니다. 제약을 준수하지 않으면 copmile error 가 발생합니다.

꼬리질문

제네릭의 타입 파라미터는 언제 실제 타입으로 변환되나요?

타입 파라미터는 사용할때 실제 존재하는 타입으로 치환 되며 이과정을 구체화(specialization) 라고합니다.
함수의 경우 실제 호출되었을때 타입 파라미터가 존재하는 타입으로 치환되며 타입의 경우 초기화 되어 메모리에 올라갈때 치환된다.

성능에 이점이 있나요?

Struct와 Protocol을 사용해 다형성을 구현하게되면 class의 V-Table과 유사한방식으로 런타임시점에 동작하는 DynamicDispatch 방식으로 동작하게 되어 struct의 성능이점이 줄어들게 되는데
제너릭 제약으로 어떠한 프로토콜을 준수하는 타입을 인자로 받게하면, 추가적인 heap 할당 없이 인자의 타입이 inline되어 staticDispatch 방식으로 동작하게되어 성능에 이점이 있습니다.

Standard Library에서의 예시

Dictionary, Array와 같은 generic collection이 있습니다. Dictionary는 Key, Value로 Array에서는 Element로 generic 타입이 정의되어 있습니다.
diffableDataSourcSectioneSanpshot에서 Item이 제네릭으로 정의되어 있습니다.

Hashable을 채택한 경우만 사용할 수 있도록 제약을 줬습니다.

Protocol 에서의 제네릭

Protocol내부에서 제네릭과 같이 추상적인 타입을 표기하는 방법에는 associatedtype이 있으며 이를 사용해 제네릭과 같이 사용할수 있습니다.

참고한 자료및 문서

https://marlangmarlang.tistory.com/86 을 참고하여 작성한 글입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함