반응형

이 게시물은 다음 링크를 참조하여 학습했습니다

 

Kotlin - 확장 함수(Extension functions)에 대해서 알아보기

Extension functions는 기존에 정의된 클래스에 함수를 추가하는 기능입니다. 자신의 함수는 쉽게 추가가 가능하지만 다른 살마이 만든 라이브러리를 갖다 쓸때는 매우 어렵습니다. 코틀린은 이런 것

codechacha.com

 

[Kotlin] 코틀린의 확장 함수(Extension Function) | choheeis

💁🏼‍♀️ 프롤로그 2019/07 ~ 2020/01 SOPT라는 IT 창업 대외 동아리 활동을 했었다. 세션에서 코틀린 확장함수에 대해 배우게 되었고, 인턴즈 라는 App을 개발할 때 사용했었다. 프로젝트들을 정리

choheeis.github.io

 

1. 확장함수?

람다를 배우면서 "확장함수"라는 개념이 나왔는데, 제대로 이해가 되지 않아 따로 찾아보고 정리하려한다.

확장함수라는 개념을 알게 되면서 가장 이해가 안되었던 부분이 이 기능이 왜 있는가? 였다.

내가 이해한 확장함수의 개념은 클래스에 새로운 기능을 추가하는 함수를 넣는 것이었다.

"상속"으로도 구현이 가능한데, 왜 확장함수가 존재할까 이해가 안됐었다.

 

1-1. For Standard Library and External Library

개발자가 임의로 만든 클래스에 기능을 추가하려면 위에서 언급했던 것처럼 상속을 통해 기능을 추가하거나, 클래스에 메서드를 추가해주면 된다.

하지만 이미 존재하는 Standard Library나 다른 사람이 만든 외부 라이브러리를 사용할 경우는 함수를 추가하기가 어렵다.

확장 함수는 이러한 점에서 굉장히 큰 이점을 가진다. 

 

2. Receiver

확장함수를 구현하기 위해 몇가지 알아야 할 용어가 있다.

- Receiver type : 확장 함수를 추가할 클래스를 말한다. 즉, 확장 대상이 될 클래스이다.

- Receiver object : 확장 함수 내부를 구현할 때, this 키워드를 사용하여 receiver type이 가지고 있는 public 인스턴스에 접근할 수 있다. 이렇게 접근한 객체를 receiver object라고 부른다.

 

확장함수는 아래처럼 사용한다!

fun List<Int>.getHigherThan(num: Int): List<Int> {
    val result = arrayListOf<Int>()
    for (item in this) {
        if (item > num) {
            result.add(item)
        }
    }
    return result
}
fun MutableList<Int>.swap(index1: Int, index2: Int) {
    val tmp = this[index1]
    this[index1] = this[index2]
    this[index2] = tmp
}

 

3. 확장 함수의 특징

  • 확장 함수는 상속이나 복잡한 디자인 패턴 없이 간단하게 확장 기능을 만들 수 있다.
  • 보일러플레이트 코드를 줄일 수 있다.
  • 정적 바인딩 된다. (주소가 컴파일타임에 지정됨)
반응형

'Legacy' 카테고리의 다른 글

[Kotlin #8] Companion Object  (0) 2022.05.24
[Kotlin #7] Sequences  (0) 2022.05.23
[Kotlin #5] Inline Functions  (0) 2022.05.16
[Kotlin #4] Scope Functions  (0) 2022.05.16
[Kotlin #3] Collections  (0) 2022.05.16

+ Recent posts