[kotlin] 코틀린에서 추상 클래스와 인터페이스의 특징 비교
코틀린은 자바와 같이 객체 지향 프로그래밍을 지원하며, 추상 클래스와 인터페이스를 정의할 수 있습니다. 이 두 가지 기능은 다양한 상황에서 사용될 수 있으며, 각각의 특징을 이해하는 것이 중요합니다.
추상 클래스 (Abstract Class)
- 추상 클래스는
abstract
키워드를 사용하여 정의됩니다. - 일반적으로 추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있습니다. 추상 메서드는 구현을 갖지 않고, 하위 클래스에서 구현하도록 강제합니다.
- 추상 클래스는 객체를 직접 생성할 수 없으며, 하위 클래스가 상속받아야 합니다.
- 추상 클래스는 인터페이스와 달리 필드, 일반 메서드, 생성자 등을 포함할 수 있습니다.
- 하위 클래스는 추상 클래스의 추상 메서드를 반드시 구현해야 합니다.
abstract class Animal {
abstract fun makeSound()
fun sleep() {
println("동물이 잠자고 있습니다.")
}
}
class Dog : Animal() {
override fun makeSound() {
println("멍멍!")
}
}
인터페이스 (Interface)
- 인터페이스는
interface
키워드를 사용하여 정의됩니다. - 인터페이스는 추상 메서드와 추상 프로퍼티만 정의할 수 있습니다. 구현이나 필드는 허용되지 않습니다.
- 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
- 인터페이스는 다중 상속을 지원하며, 다른 인터페이스에서 상속될 수 있습니다.
- 인터페이스는 인스턴스화할 필요가 없으며, 클래스에서 구현되어야 합니다.
interface Animal {
fun makeSound()
}
interface CanFly {
fun fly()
}
class Bird : Animal, CanFly {
override fun makeSound() {
println("짹짹!")
}
override fun fly() {
println("날아갑니다.")
}
}
추상 클래스와 인터페이스의 비교
- 추상 클래스는 구체적인 구현이 필요한 경우 사용되며, 인터페이스는 행동을 정의하는 데 사용됩니다.
- 추상 클래스는 하나의 클래스에서만 상속받을 수 있으며, 인터페이스는 다중 구현이 가능합니다.
- 추상 클래스는 필드와 일반 메서드를 가질 수 있지만, 인터페이스는 추상 메서드와 추상 프로퍼티만 가질 수 있습니다.
- 추상 클래스는 객체를 생성할 수 없지만, 인터페이스는 직접적으로 객체를 생성할 수 없습니다. 인터페이스를 구현한 클래스에서 객체를 생성해야 합니다.