- 코틀린에서 인터페이스의 경우 추상 프로퍼티를 포함할 수 있다.
- 인터페이스를 구현하는 클래스가 해당 프로퍼티에 대한 구현을 제공해야 한다.
추상 프로퍼티 선언 예시
interface User {
val nickname: String
}
//주 생성자에서 프로퍼티를 직접 선언한다.
class PrivateUser(override val nickname: String) : User {
/*User 의 추상 프로퍼티를 override 키워드로 구현*/
}
// 커스텀 게터를 사용한다.
class SubscribingUser(val email: String) : User {
/*이메일 주소에서 별명을 계산하여 반환하는 커스텀 게터 사용*/
override val nickname: String
get() = email.substringBefore('@')
}
// 초기화 식을 사용한다.
class FacebookUser(val accountId: Int) : User {
//객체 초기화시 계산한 데이터를 저장하고, 이를 nickname 의 프로퍼티 값으로 사용
override val nickname = getFacebookName(accountId)
}
인터페이스에서 게터와 세터가 있는 프로퍼티 선언
interface User {
val email: String
val nickname: String
get() = email.substringBefore('@')
}
- email은 추상 프로퍼티로 하위 클래스에서 반드시 구현해야 합니다.
- nickname은 커스텀 게터를 사용하여 구현되며, 하위 클래스에서 오버라이드하지 않고 상속할 수 있습니다.
클래스에서 구현된 프로퍼티와 접근자
- 클래스에서 구현된 프로퍼티는 뒷받침하는 필드를 원하는 대로 사용 가능.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린 인 액션] 4.2.2 __부 생성자: 상위 클래스를 다른 방식으로 초기화__ (0) | 2024.03.04 |
---|---|
[KOTLIN] 클래스 초기화 : 주 생성자와 초기화 블럭 (0) | 2024.02.21 |
[KOTLIN] 봉인된 클래스(sealed class) : 클래스 계층의 확장 제한 (0) | 2024.02.19 |
[KOTLIN] 클래스 계층 정의 (0) | 2024.02.09 |
[KOTLIN] 로컬 함수와 확장 (0) | 2024.02.09 |