Kotlin을 어느 정도 사용하다 보면 제네릭(Generic)은 피할 수 없는 주제가 됩니다.특히 다음과 같은 코드에서 한 번쯤은 멈칫하게 됩니다.val strings: List = listOf("a", "b")val anys: List = strings // 왜 안 될까?이 글에서는 Kotlin 공식 문서의 Generics, Variance 섹션을 기준으로, 왜 이런 제약이 존재하는지, 그리고 in / out 키워드가 어떤 문제를 해결하는지를 정리합니다.1. 제네릭은 왜 필요한가?제네릭은 타입 안정성을 유지하면서 재사용 가능한 코드를 만들기 위한 장치입니다.class Box(val value: T)val intBox = Box(1)val stringBox = Box("hello")하지만 제네릭을 사용하..