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 타입(소비하지만 생산하지는 않음)으로 만드는 것이다.

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