계발자 블로그
[Kotlin] 추상 클래스 와 인터페이스 본문
추상 클래스란(Abstract Class) ?
추상 메서드를 가지고 있는 클래스를 의미합니다.
추상 메서드는 구현되지 않은 메서드입니다.
추상 클래스는 구현 되지 않은 추상 메서드를 가지고 있기 때문에 객체로 만들 수 없습니다.
반드시 자식 클래스에서 오버라이딩 즉 상속을 통해서 재정의 해야합니다.
추상 클래스의 목적은 자식 클래스에서 메서드를 오버라이딩 하기 위해 강제성을 부여하기 위함입니다.
추상 클래스 안에는 일반 메서드도 구현이 가능합니다.
추상 클래스 내의 프로퍼티 또한 abstract로 선언할 수 있습니다.
마찬가지로 상속 받는 클래스에서 구체화 해야 합니다.
추상 클래스 사용법
abstract class Super1 {
abstract fun method2()
}
class와 fun 앞에 abstract를 붙여줍니다.
kotlin에서는 상속 가능하기 위해 앞에 open 키워드를 붙여야 하지만
abstract를 붙이면 open 키워드를 사용하지 않아도 됩니다.
그리고 자식 클래스에서 추상 클래스를 상속 받으면
추상 메서드가 오버라이딩 되지 않아 에러가 발생 합니다.
class Sub1: Super1() {
override fun method1() {
print("Sub1의 method1입니다.")
}
}
그래서 이런식으로 오버라이딩 하여 강제적으로 사용하도록 만든 것이 추상클래스입니다.
인터페이스란(Interface) ?
Kotlin은 자바처럼 다중 상속을 지원하지 않습니다.
그렇기 때문에 추상 클래스 하나 마다 하나의 클래스가 필요합니다.
하지만 인터페이스는 한 클래스에서 여러개의 인터페이스를 구현할 수 있는 장점이 있습니다.
인터페이스는 클래스가 아니기 때문에 객체를 생성할 수 없고 구현 시 ()를 사용하지 않습니다.
인터페이스 사용법
interface Super1 {
fun method1()
fun method2() {
print("asdas")
}
}
인터페이스는 이름 앞에 interface 키워드를 붙여서 사용할 수 있습니다.
메서드에 abstract를 붙이지 않아도 추상 메서드로 사용할 수 있습니다.
메서드에 구현부를 작성한다면 일반 메서드로 동작하게 되서 강제성이 없는 메서드입니다.
class Sub1: Super1, Super2 {
override fun method1() {
print("Sub1의 method1입니다.")
}
override fun method3() {
print("Sub1의 method2입니다.")
}
}
클래스에서는 이런식으로 여러개의 인터페이스를 구현할 수 있습니다.
'Kotlin' 카테고리의 다른 글
[Coroutine] Flow (1) | 2024.04.25 |
---|---|
[Kotlin] inline 함수, reified (0) | 2023.06.05 |
[Kotlin] Null 처리 (0) | 2023.03.14 |
[Kotlin] 코틀린 Companion Object (0) | 2023.03.01 |
[Kotlin] Kotlin Property (코틀린 프로퍼티) (0) | 2023.03.01 |