더북(TheBook)
fun <T> addAll(list1: MutableList<T>,
               list2: MutableList<out T>) { // <-- T를 공변성으로 만듦
    for (elem in list2) list1.add(elem)
}

val ls = mutableListOf("A String")
val la: MutableList<Any> = mutableListOf()
addAll(la, ls) // <-- 오류가 발생하지 않음

여기서 out 키워드는 list2 파라미터가 T 타입에 대해 공변성적임을 표시한다. 따라서 반공변성은 in이라는 키워드로 표시할 수 있음을 추측할 수 있다. 그러므로 이 문제를 푸는 다른 해법은 list1in 타입(소비하지만 생산하지는 않음)으로 만드는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.