제네릭2 [Effective Kotlin] 아이템 24. 제네릭 타입과 variance 한정자를 활용하라 자바를 공부하고 적용하면서 추상화를 하기 위해 인터페이스를 적극 활용했었고, 강타입 언어였기에 특히 타입을 잘 활용했어야 했다. 그 과정에서 제네릭을 다시 한번 공부하게 되었고, 공변, 반공변 성 등의 특징을 제네릭이 어떻게 풀어냈는지 공부했다. extend, super 등의 한정자를 사용하여 타입을 적절히 제어했었던 기억이 있다. 코틀린도 마찬가지로 제네릭의 한정자를 제공한다. 자바의 결함을 개선하면서 말이지. Out 한정자 파라미터를 공변으로 만든다. class University open class Student class FreshMan : Student() fun main(args: Array) { val b: University = University() // OK val a: Universi.. 2023. 1. 27. [Effective Kotlin] 아이템 23. 타입 파라미터의 섀도잉을 피하라 섀도잉이란 무엇인가? class Person(val name : String) { fun addPerson(name : String) { // ... } } addPerson() 함수의 파라미터가 Person class의 프로터티 이름과 같아진다. 외부 스코프의 프로퍼티를 가리게 되는 경우를 섀도잉이라 한다. 이를 개발자가 알아차리기 힘든 경우가 생긴다. 타입 파라미터에서도 문제가 생긴다. interface Payment class KakaoPay: Payment class NaverPay: Payment class PaymentHistory { fun addPayment(payment: T) { // ... } } 이러한 경우는 PaymentHistory의 제네릭 타입과 addPayment()의 타입 .. 2023. 1. 25. 이전 1 다음 반응형