728x90
확장함수
- 클래스에 상속하거나 디자인 패턴을 사용하지 않고 새로운 기능으로 클래스를 확장 할 수 있는 기능을 제공하게 해줌
- 마치 기존 클래스의 멤버 함수인 것처럼 사용할 수 있게 해주는 함수
확장함수 구조
fun 클래스이름.함수이름(인자타입): 리턴타입 {
구현부
}
- 클래스이름은 확장이 정의될 클래스를 명시해주고 수신객체 타입임 (수신객체는 클래스에 속한 인스턴스 객체)
- 클래스뒤에 . 찍고 함수이름을 정의하여, 함수내부에서는 this키워드로 수신객체멤버를 사용
확장함수 예시
fun main() {
val order = Order(listOf(Item("Bread", 25),
Item("Wine", 30), Item("Water", 12)))
//가장 비싼 아이템 이름 : Wine
println("가장 비싼 아이템 이름 : ${order.maxPricedItemName()}")
}
private fun Order.maxPricedItemName() = this.items.maxByOrNull { it.price }?.name ?: "NO PRODUCT"
data class Order(val items:List<Item>)
data class Item(val name:String, val price:Int)
- 함수추가 대상 클래스는 Order, 함수 이름은 maxPricedItemName()
- 함수의 구현부에서 this는 객체의 자신
확장함수 특징
- 상속이나 디자인 패턴 없이 간단하게 확장 기능을 만들 수 있음
- 보일러플레이트 코드를 줄임
- 정적바인딩이 가능 (정적바인딩 : 함수 호출 부분에 메모리 주소값을 저장하는 작업이 컴파일 시간에 행해지는 것, 컴파일 이후의 값이 변경되지 않는 것)
'KOTLIN' 카테고리의 다른 글
[KOTLIN] LATEINIT / LAZY (0) | 2022.05.22 |
---|---|
[KOTLIN] 시퀀스 (SEQUENCES) (0) | 2022.05.22 |
[KOTLIN] Scope 함수 (0) | 2022.05.18 |
[KOTLIN] 컬렉션 (0) | 2022.05.18 |
[KOTLIN] OPEN 키워드 (0) | 2022.05.10 |