티스토리 뷰
objective-c collection generics
objc의 제네릭은 lightweight이라고 한다. 원래 objc의 제네릭이 없었던 것 같은데 swift의 제네릭과 호환하기 위해서 나온 것 같다. 꼭 호환을 위해서가 아니더라도 objc에서 자체적으로 쓸 수도 있는데 swift에 비해서 strict하지 않다. 그래서 lightweight라고 한 것 같다. swift에서는 염격하게 제네릭 타임이 아니면 넣지도 못하는데 objc에서는 경고만 띄어준다. 경고에 성격상 빌드도 되고 실행도 된다. 또한 콜랙션 요소를 받을 때도 타임이 맞지 않으면 경고만 띄어준다. 역시 실행된다. 기본적으로 objc에서 쓸 때는 제한이 많이 없는 것 같다. custom class에서도 사용가능하고, 기본 콜랙션 객체인 NSSet, NSArray, NSDictionary 외에 NSMutableArra NSMutableDictionary 등. 다만, swift와 호환을 하면 NSSet, NSArray, NSDictionary를 제외한 나머지 객체에 대해서는 swift가 무시 한다고 한다. 더 상세하고 자세한 예제들은 아래 링크에서 확인할 수 있다. 쓰기는 쉽다. 그래서 lightweight인가? objc 런타임이 아니라 LLVM에서 지원하는 거라서 그렇다고 하는 글도 있다. 여기에는 __kindof도 소개해준다. __kindof type하면, type의 하위타입들도 다 포함.
위 __kindof는 콜랙션에 쓰고
__covariant custom type에 쓴다.
자바
__covariant 는 < ? extends T>
__contravarian는 <? super T>
여기에서도 소개하고 있다.
한국어
영어
objc에 제네릭이 추가되기 전에 만들어 진 것 같은 소스
일일이 하나씩 다 구현한 노고에 박수👏
관련 apple 문서
wwdc 2015 - 401
objc에서 제네릭을 구현하고 swift에서 어떻게 보이는지 보는 방법(슬라이드 앞에 2장만 보면 됨) swift와 objc가 어떻게 서로 연결되는지? 등 전반적인 내용