[kotlin] 코틀린에서 상속과 인터페이스를 활용한 다형성 예제

코틀린은 자바와 마찬가지로 상속과 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 이를 통해 객체 지향 프로그래밍의 주요 개념을 적용할 수 있습니다. 이번 예제에서는 코틀린에서 상속과 인터페이스를 활용한 다형성의 사용법을 알아보겠습니다.

Animal 클래스 정의하기

open class Animal(val name: String) {
    open fun makeSound() {
        println("이 동물은 소리를 짓습니다.")
    }
}

위의 코드에서 Animal 클래스를 정의하였습니다. name 속성을 가지고 있으며, makeSound 메소드를 갖습니다. makeSound 메소드는 기본적으로 “이 동물은 소리를 짓습니다.”라는 메시지를 출력하도록 정의되어 있습니다.

Dog 클래스 정의하기

class Dog(name: String) : Animal(name) {
    override fun makeSound() {
        println("멍멍")
    }
}

위의 코드에서 Dog 클래스를 정의하였습니다. Animal 클래스를 상속받으며, makeSound 메소드를 재정의하여 “멍멍”이라는 메시지를 출력하도록 하였습니다.

Cat 클래스 정의하기

class Cat(name: String) : Animal(name) {
    override fun makeSound() {
        println("야옹")
    }
}

위의 코드에서 Cat 클래스를 정의하였습니다. 마찬가지로 Animal 클래스를 상속받으며, makeSound 메소드를 재정의하여 “야옹”이라는 메시지를 출력하도록 하였습니다.

다형성 활용하기

fun main() {
    val dog: Animal = Dog("멍멍이")
    val cat: Animal = Cat("야옹이")
    
    dog.makeSound()
    cat.makeSound()
}

위의 코드에서 main 함수에서 Animal 타입의 변수 dogcat을 선언하고, 각각 DogCat 객체를 할당하였습니다.

dogcat 변수는 모두 Animal 타입으로 선언되었지만, 이들을 통해 각각 DogCat 객체의 makeSound 메소드를 호출할 수 있습니다.

실행 결과는 다음과 같습니다.

멍멍
야옹

위의 예제에서는 Animal 클래스를 상속받은 DogCat 클래스를 정의하였습니다. 이들은 Animal 타입으로 선언된 변수에 할당될 수 있으며, 각각의 makeSound 메소드가 호출되어 다른 결과를 출력하는 것을 확인할 수 있습니다.

다형성을 활용하여 여러 클래스를 동시에 처리하고, 각 객체의 특성에 따라 다른 동작을 수행할 수 있습니다.

결론

코틀린에서 상속과 인터페이스를 활용한 다형성의 예제를 살펴보았습니다. 객체 지향 프로그래밍의 핵심 개념을 적용하여 다양한 타입의 객체를 처리하는 코드를 구현할 수 있습니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.

참고 링크: