[kotlin] 공변성 연산자

코틀린에서는 공변성(co-variant)을 나타내기 위한 연산자로 out 키워드를 사용합니다. 공변성은 부모 자료형과 그 자식 자료형 간의 관계를 설명하는데 사용되며, 이를 통해 컴파일러가 자료형의 변환을 허용하거나 제한할 수 있습니다.

공변성의 이점

공변성은 불변성(invariance)과 대조적으로, 자식 자료형이 부모 자료형의 하위 자료형으로 취급될 수 있도록 허용합니다. 이는 자료구조를 더 유연하게 다룰 수 있게 해주며, 코드의 재사용성을 높여줍니다.

예제

다음은 out 키워드를 사용하여 공변성을 나타내는 예제입니다.

interface Animal {
    fun speak()
}

class Dog : Animal {
    override fun speak() {
        println("Woof!")
    }
}

class Cat : Animal {
    override fun speak() {
        println("Meow!")
    }
}

class AnimalShelter<out T : Animal>(private val animal: T) {
    fun makeAnimalSpeak() {
        animal.speak()
    }
}

fun main() {
    val dogShelter: AnimalShelter<Dog> = AnimalShelter(Dog())
    val catShelter: AnimalShelter<Cat> = AnimalShelter(Cat())

    dogShelter.makeAnimalSpeak()
    catShelter.makeAnimalSpeak()
}

위의 예제에서 AnimalShelter 클래스의 제네릭 타입 매개변수 Tout 키워드가 사용되었습니다. 이를 통해 AnimalShelter<Dog>AnimalShelter<Cat>AnimalShelter<Animal>의 서브타입으로 취급될 수 있게 되었습니다.

결론

코틀린의 공변성 연산자인 out 키워드를 사용하여 자료형의 변환을 더욱 유연하게 다룰 수 있으며, 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.

더 많은 정보는 코틀린 문서를 참고하세요.