티스토리 뷰
반응형
추상 프로퍼티
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
링크
TAG
- 코틀린
- 1차 인터뷰
- downTo
- python3
- java
- Basic Type
- pm.test
- squash merge
- pm.expect
- 확장 함수
- Kotlin In Action
- Python
- postman tests
- 주생성자
- 네이버 2022 공채
- Kotlin
- postman
- mysql
- DGS Framework
- hashcode
- github
- Squash and merge
- 2차 인터뷰
- go 특징
- graphql
- 코딩테스트
- git
- solidity
- string
- postman collection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함