KOTLIN

[KOTLIN] 확장함수

집한구석 2022. 5. 22. 14:01
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