이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.
작성 시점: 2017-09-06
세번째 글에 이어서...
그러면 코틀린에서는 자바와 같은 Use-Site Variance를 사용하지 못하는가? 대답은 No 이다.
코틀린에서는 Type projection / Star projections 라는 것을 제공한다.
코틀린에서는 Use-Site Variance 개념도 제공한다. Use-Site Variance를 사용할 때는 인스턴스의 실제 타입을 알 수 없을때 쓴다. 물론, 그에 따라 타입에 대한 제한적인 유형을 제공하고, 이 것을 Type projection 라고 부른다.
쓸 때에는 이렇게 사용한다.
interface KtWriteOnlyWithUseSite<T>{
fun addItem(item: KtWriteOnlyWithUseSite<in T>)
fun addAll(list: List<KtWriteOnlyWithUseSite<in T>>)
}
Star projection 은 어떤 타입의 아류형을 판단하는 안전한 방법을 제공하는데, 쓸 때에는 이렇게 사용한다.
if (element is List<*>)
다만 이 Star projection은 자바의 raw types 와 매우 닮았지만, 위에서도 말했다싶이 안전하다.
이로서 4개 글에 거쳐서 제너릭 관련 처리에 대해 알아본 것 같다. 물론, 여기서 다루지 않은 것도 있다.
<T: Serializable>
- 받을 수 있는 타입을 Serializable 를 구현하고 있는 객체만 받을 수 있게 제한함where T: Comparable, T: Cloneable
- 받을 수 있는 타입을 Comparable, Cloneable 둘 중 하나라도 구현하고 있는 객체만 받을 수 있게 제한함코틀린으로 자주 코드 짜면서 어렴풋이 이해하고는 있었지만 누군가에게 한참 설명이 부족했던 부분에 대해 자세히 알 수 있어서 좋았다고 생각된다.