You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
무공변 : A 가 B 의 서브 타입이라고 해도, List 는 List 의 서브 타입이 아니다.
공변성(out) : A 가 B 의 서브 타입이라면, List 는 List 의 서브 타입이다. (읽기 전용)
반공변성(in) : A 가 B 의 서브 타입이라면, List 는 List 의 서브 타입이다. (쓰기 전용)
예시를 들면, 특정 class 가 Flow 처럼 Producer 일 경우 out 키워드를 사용하고, FlowCollector 와 같이 Consumer 의 역할을 할 경우 in 키워드를 사용합니다.
사용 지점 변성(use-site variance) : 제네릭 타입을 사용하는 곳에서 변성을 지정하는 것 (Kotlin)
선언 지점 변성(declaration-site variance) : 제네릭 타입을 선언하는 곳에서 변성을 지정하는 것 (JAVA, Kotlin)
java 는 선언 지점 변성 만을 제공하기 때문에, 변성을 지정하는 모든 곳에서 변성을 지정해야합니다.
반면, Kotlin 은 사용 지점 변성 을 지원하기 때문에, 변성을 지정하는 곳에서만 변성을 지정하면 되기 때문에 훨씬 간결하게 사용할 수 있습니다.
참고) out, in 키워드는 private class, 메서드에 대해서는 사용할 수 없다.
참고) java 는 Stream api를 보면 거의 모든 곳에서 ? extends, ? super 를 사용하여 변성을 지정한다.
Kotlin 은 기본적으로 제공하는 Function 에 in, out 키워드로 변성을 지정되어 사용할 때 훨씬 간결하게 사용할 수 있다.
자바 vs 코틀린 변성
자바 : 와일드 카드를 사용하여 변성을 지정한다. 모두 사용 지점 변성이다.
코틀린 : in, out 키워드를 사용하여 변성을 지정한다. 사용 지점 변성과 선언 지점 변성을 모두 지원한다.
Kotlin의 장점은 변성을 미리 지정할 수 있어 코드가 더 명확하고 안전하게 작성될 수 있다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
변성이란 서로 다른 제네릭 타입 간의 상속 관계를 어떻게 다루는지를 말합니다.
변성의 종류
예시를 들면, 특정 class 가 Flow 처럼 Producer 일 경우 out 키워드를 사용하고, FlowCollector 와 같이 Consumer 의 역할을 할 경우 in 키워드를 사용합니다.
java 는 선언 지점 변성 만을 제공하기 때문에, 변성을 지정하는 모든 곳에서 변성을 지정해야합니다.
반면, Kotlin 은 사용 지점 변성 을 지원하기 때문에, 변성을 지정하는 곳에서만 변성을 지정하면 되기 때문에 훨씬 간결하게 사용할 수 있습니다.
참고) out, in 키워드는 private class, 메서드에 대해서는 사용할 수 없다.
참고) java 는 Stream api를 보면 거의 모든 곳에서 ? extends, ? super 를 사용하여 변성을 지정한다.
Kotlin 은 기본적으로 제공하는 Function 에 in, out 키워드로 변성을 지정되어 사용할 때 훨씬 간결하게 사용할 수 있다.
자바 vs 코틀린 변성
Kotlin의 장점은 변성을 미리 지정할 수 있어 코드가 더 명확하고 안전하게 작성될 수 있다.
참고 블로그
Beta Was this translation helpful? Give feedback.
All reactions