티스토리 뷰

반응형

추상 프로퍼티

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함