Kotlin - Generics (4) : Type projections and Summary

WindSekirun (wind.seo)·2022년 4월 26일
0

이 글은 기존 운영했던 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 둘 중 하나라도 구현하고 있는 객체만 받을 수 있게 제한함
  • 당연하게도, 메소드에도 제너릭을 가질 수 있음

코틀린으로 자주 코드 짜면서 어렴풋이 이해하고는 있었지만 누군가에게 한참 설명이 부족했던 부분에 대해 자세히 알 수 있어서 좋았다고 생각된다.

profile
Android Developer @kakaobank

0개의 댓글