[KOTLIN] 확장함수

2022. 5. 22. 14:01·KOTLIN
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
'KOTLIN' 카테고리의 다른 글
  • [KOTLIN] LATEINIT / LAZY
  • [KOTLIN] 시퀀스 (SEQUENCES)
  • [KOTLIN] Scope 함수
  • [KOTLIN] 컬렉션
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    java
    Spring
    IntelliJ
    이펙티브코틀린
    go
    엘라스틱서치
    프로그래머스
    docker
    Elk
    자바
    JPA
    cleancode
    이펙티브 코틀린
    코틀린
    splunk
    AWS
    ElasticSearch
    Kafka
    클린코드
    SQL
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[KOTLIN] 확장함수
상단으로

티스토리툴바