Extension functions(확장 함수)
- 기존에 정의된 클래스에 함수를 추가하는 기능이다.
- 자신이 만든 클래스는 새로운 함수가 필요할 때 쉽게 추가할 수가 있지만, Standard Library 또는 다른 사람이 만든 라이브러리를 사용할 때 함수를 추가하기가 어렵습니다.
- 이럴때 코틀린의 확장 함수를 사용할 수 있습니다.
확장 함수를 정의하는 방법
- 형식 :
fun 클래스이름.함수이름(인자 타입): 리턴타입 { 구현부 }
fun List<Int>.getHigherThan(num: Int): List<Int> {
val result = arrayListOf<Int>()
for (item in this) {
if (item > num) {
result.add(item)
}
}
return result
}
- Generic class의 확장 함수
fun <'E'> 클래스이름<'E'>.함수이름(인자타입): 리턴타입 { 구현부 }
fun <T> MutableLiveData<T>.asLiveData() = this as LiveData<T>
fun <T> LiveData<T>.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer<T>) {
observe(
lifecycleOwner,
object : Observer<T> {
override fun onChanged(t: T?) {
observer.onChanged(t)
removeObserver(this)
}
}
)
}
확장 함수를 사용하지 않고 상속과 Composition을 이용