안녕하세요 연봉 1억 개발자 dev-woo 입니다.
코틀린은 자바 가상 머신에서 실행되는 순수 객체 지향 프로그래밍 언어입니다. 코틀린은 자바에 비해 간결하고 명확한 문법을 제공하며, 더 나은 안전성 및 성능을 제공합니다. 이번 포스트에서는 코틀린에서의 상속 및 다형성에 대해 알아보겠습니다.
클래스 상속
코틀린은 자바와 마찬가지로 클래스를 상속할 수 있습니다. 클래스 상속을 통해 기존에 작성된 클래스를 확장하거나 재사용할 수 있습니다. 클래스 상속은 다음과 같은 형식으로 작성됩니다.
open class Animal {
// Animal 클래스의 멤버들
}
class Dog : Animal() {
// Dog 클래스의 멤버들
}
위의 코드에서 Animal
클래스는 open
키워드를 사용하여 상속이 가능하도록 선언되었습니다. Dog
클래스는 Animal
클래스를 상속받기 위해 :
기호를 사용합니다. 이제 Dog
클래스는 Animal
클래스의 모든 멤버를 포함하며, 필요한 경우 재정의할 수 있습니다.
메서드 재정의
코틀린에서는 메서드를 재정의할 수 있습니다. 재정의된 메서드는 override
키워드를 사용하여 표시됩니다. 메서드 재정의는 클래스 상속과 함께 사용되며, 다음과 같은 형식으로 작성됩니다.
open class Animal {
open fun makeSound() {
//
}
}
class Dog : Animal() {
override fun makeSound() {
//
}
}
위의 코드에서 Animal
클래스에는 makeSound()
메서드가 선언되어 있습니다. 이 메서드는 open
키워드를 사용하여 재정의가 가능하도록 선언되었습니다. Dog
클래스는 Animal
클래스를 상속하고 있으며, makeSound()
메서드를 재정의하여 개 특유의 소리를 내도록 구현하였습니다.
다형성
코틀린에서의 다형성은 상속 및 메서드 재정의와 함께 동작합니다. 다형성은 객체 지향 프로그래밍에서 가장 중요한 개념 중 하나입니다. 다형성을 사용하면 동일한 인터페이스를 구현하는 클래스들이 서로 다른 방식으로 동작할 수 있습니다.
open class Animal {
open fun makeSound() {
//
}
}
class Dog : Animal() {
override fun makeSound() {
println("멍멍")
}
}
class Cat : Animal() {
override fun makeSound() {
println("야옹")
}
}
위의 코드에서 Animal
클래스는 makeSound()
메서드를 선언하고 있습니다. 이 메서드는 open
키워드를 사용하여 재정의가 가능하도록 선언되었습니다. Dog
및 Cat
클래스는 Animal
클래스를 상속받고, makeSound()
메서드를 재정의하여 개 및 고양이 특유의 소리를 내도록 구현하였습니다.
fun main() {
val animal1: Animal = Dog()
val animal2: Animal = Cat()
animal1.makeSound()
animal2.makeSound()
}
위의 코드에서 animal1
변수는 Dog
클래스의 객체를 참조하고 있으며, animal2
변수는 Cat
클래스의 객체를 참조하고 있습니다. 이 두 객체는 Animal
클래스의 인스턴스이며, Animal
클래스의 인터페이스를 구현하고 있습니다. Animal
타입의 변수에 대해 makeSound()
메서드를 호출하면, 각 객체의 재정의된 makeSound()
메서드가 호출되어 개와 고양이의 특유의 소리를 출력하게 됩니다.
결론
코틀린은 객체 지향 프로그래밍 언어이므로, 상속과 다형성은 매우 중요한 개념입니다. 클래스 상속 및 메서드 재정의를 통해 기존 클래스를 재사용하고 확장할 수 있으며, 다형성을 사용하여 코드의 유연성을 높일 수 있습니다. 코틀린이 제공하는 상속 및 다형성 기능은 안전하고 간결한 구현을 가능하게 해주므로, 초보자부터 전문가까지 모두 활용할 수 있습니다.
'WebDev' 카테고리의 다른 글
python으로 naver 블로그 크롤링 crawler (10) | 2024.02.24 |
---|---|
코틀린에서의 인터페이스와 추상 클래스 (0) | 2023.03.26 |
Kotlin에서 함수 및 람다 (0) | 2023.03.26 |
코틀린에서의 제어 흐름과 반복문 (0) | 2023.03.26 |
코틀린(Kotlin) 기초 구문 (0) | 2023.03.26 |
댓글