코틀린은 자바와 마찬가지로 상속과 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 이를 통해 객체 지향 프로그래밍의 주요 개념을 적용할 수 있습니다. 이번 예제에서는 코틀린에서 상속과 인터페이스를 활용한 다형성의 사용법을 알아보겠습니다.
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
타입의 변수 dog
와 cat
을 선언하고, 각각 Dog
와 Cat
객체를 할당하였습니다.
dog
와 cat
변수는 모두 Animal
타입으로 선언되었지만, 이들을 통해 각각 Dog
와 Cat
객체의 makeSound
메소드를 호출할 수 있습니다.
실행 결과는 다음과 같습니다.
멍멍
야옹
위의 예제에서는 Animal
클래스를 상속받은 Dog
와 Cat
클래스를 정의하였습니다. 이들은 Animal
타입으로 선언된 변수에 할당될 수 있으며, 각각의 makeSound
메소드가 호출되어 다른 결과를 출력하는 것을 확인할 수 있습니다.
다형성을 활용하여 여러 클래스를 동시에 처리하고, 각 객체의 특성에 따라 다른 동작을 수행할 수 있습니다.
결론
코틀린에서 상속과 인터페이스를 활용한 다형성의 예제를 살펴보았습니다. 객체 지향 프로그래밍의 핵심 개념을 적용하여 다양한 타입의 객체를 처리하는 코드를 구현할 수 있습니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.
참고 링크: