Programming Language/Kotlin
[Kotlin] 인터페이스에 프로퍼티 선언
SdardewValley
2022. 8. 6. 23:44
반응형
추상 프로퍼티
interface User {
val nickname: String
}
코틀린 인터페이스에는 추상 프로퍼티를 선언할 수 있다. 인터페이스는 상태 저장이나 프로퍼티의 값을 조회할 수 있는 getter과 같은 기능이 없기 때문에 상속 받은 클래스에서 이를 구현해야 한다.
하위 클래스에서 추상 프로퍼티 구현
interface User {
val nickname: String
}
class YoutubeUser(override val nickname: String): User
class TwitterUser(val email: String): User {
override val nickname: String
get() = email.substringBefore('@')
}
class TistoryUser(val email: String): User {
override val nickname: String = email.substringBefore('@')
}
YoutubeUser, TwitterUser, TistoryUser 모두 상속받아 nickname을 오버라이드한다. 추상 프로퍼티에 해당하는 부분에 모두 override 키워드가 있는 것을 알 수 있다.
YoutubeUser은 주 생성자에 추상 프로퍼티를 직접 구현한다. TwitterUser은 getter를 통해서 nickname 값을 초기화한다. TistoryUser은 초기화 식으로 nickname을 초기화한다.
TwitterUser에서는 nickname이 호출 될 때마다 substringBefore 함수가 호출된다. 반대로 TistoryUser 객체를 초기화할 때 substringBefore이 한번 호출되고 nickname이 호출되면 초기화 때 저장한 데이터를 불러온다.
인터페이스에 get이 있는 프로퍼티 선언
인터페이스에는 getter, setter가 있는 프로퍼티를 선언할 수 있다.
interface Name {
val fullName: String
val lastName: String
get() = fullName.substringAfterLast(" ")
}
class EnglishName(override val fullName: String): Name
Name을 구현하는 하위 클래스에서는 fullName은 반드시 오버라이드 해야하지만, lastName은 오버라이드를 하지 않아도 된다.
참고
- Kotlin IN ACTION