Generics in kotlin
Star Projection
Java 의 와일드카드와 동일하게 사용됨
타입 캡쳐를 하지않음
와일드카드를 이용해 공변/반공변을 지원한 자바와는 다른 문법으로 공변/반공변을 지원하기때문에 와일드카드보다는 사용할 일이 줄어듦
Type Reified
자바는 타입 파라미터에 대한 정보를 런타임에 구할수 있는 방법이 전무함
코틀린은 inline + reified 제어자를 이용해 타입 파라미터에 대한 정보를 구할 수 있음
코틀린의 inline 제어자는 함수의 바이트 코드를 컴파일러가 그대로 복붙해서 넣어주기때문에 JVM 위에서 자바와 다르게 실행되는 점은 없으며, 코틀린의 syntax sugar.
inline + reified 가 없는 경우에는 자바와 마찬가지로 Class<T> 를 명시적으로 전달해야함
주로 Class<T> 를 필요로하는 deserialize 관련 라이브러리들은 이미 코틀린에서 이를 지원하는 API를 제공함
타입 구체화와 강력한 타입 추론을 통해 자바보다 편하게 API 들을 사용할 수 있음
use-site variance / declaration-site variance
공변/반공변을 지원하는 두 방식
자바는 사용하는 곳에서만 공변/반공변을 구현할 수 있는 use-site variance 만 가능
코틀린 표준 라이브러리에 정의되어있는 List<T> 같은 경우 add() 메서드와 같은 consume 메서드가 존재하지않음
클래스(인터페이스) 자체가 producer 역할만 하게됨
이런 경우 클래스 선언시 공변/반공변 코드를 작성할 수 있음
클래스가 producer/consumer 역할을 모두 하고있어 선언처에서 공변/반공변 선언이 불가능하다면 자바처럼 use-site variance 선언도 가능 (ex. MutableList<T>)
공변/반공변 선언을 할경우 강력한 컴파일러의 체크를 받게됨
참고자료
코틀린 인 액션/서적
kotlinlang.org/공식홈페이지
Made with Slides.com