Kotlin/포스팅

코틀린 확장 함수

짜집퍼박사(짜박) 2023. 12. 17. 08:42

코틀린에서 확장 함수(Extension Function)는 기존 클래스에 새로운 함수를 추가할 수 있는 기능입니다. 이를 통해 코틀린은 자바와 같은 언어에서 볼 수 있는 보일러플레이트 코드를 줄이고, 코드를 더 간결하게 만들 수 있습니다. 확장 함수는 수신 객체(receiver object)에 새로운 함수를 추가하는 것으로, 수신 객체의 멤버 함수처럼 호출할 수 있습니다. 이를 통해 기존 클래스에 메소드를 추가하거나 변경할 수 있습니다.

 

1. 기본 형식

// String 클래스에 확장 함수 추가
fun String.addExclamation(): String {
    return "$this!"
}

- String 클래스에 addExclamation이라는 확장 함수를 추가하였습니다.
- this는 수신 객체를 나타냅니다.

 

2. 사용 예제

val greeting = "Hello"
val excitedGreeting = greeting.addExclamation()
println(excitedGreeting) // 출력: Hello!

기존의 String 클래스에는 addExclamation 함수가 없었지만, 확장 함수를 통해 이를 사용할 수 있게 되었습니다.

 

3. 확장 함수의 매개변수

fun String.repeat(n: Int): String {
    return this.repeat(n)
}

확장 함수에 매개변수를 추가할 수 있습니다.

 

4. Nullable 수신 객체

fun String?.isNullOrEmpty(): Boolean {
    return this == null || this.isEmpty()
}

수신 객체가 nullable일 수 있습니다.

 

5. 확장 함수로 컬렉션 조작

fun List<Int>.customSum(): Int {
    var sum = 0
    for (element in this) {
        sum += element
    }
    return sum
}

컬렉션에 대한 확장 함수를 추가하여 사용할 수 있습니다.

 

6. 확장 함수로 DSL 구현

class Person {
    var name: String = ""
    var age: Int = 0
}

fun person(init: Person.() -> Unit): Person {
    val person = Person()
    person.init()
    return person
}

DSL(Domain-Specific Language)을 만들기 위해 확장 함수를 사용하는 예시입니다.

 

7. 컴패니언 객체에 확장 함수 추가

class MyClass {
    companion object {
        fun sayHello() {
            println("Hello from companion object!")
        }
    }
}

fun MyClass.Companion.sayHi() {
    println("Hi from extension function!")
}

컴패니언 객체에도 확장 함수를 추가할 수 있습니다.

 

확장 함수는 해당 클래스의 내부에 직접적인 변경이 일어나지 않으며, 새로운 함수를 추가하는 것이므로 기존 코드를 수정하지 않고도 확장 함수를 통해 기능을 확장할 수 있습니다. 하지만 남용하면 코드의 가독성이 떨어질 수 있으므로 적절하게 사용해야 합니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 오버로딩  (0) 2023.12.17
코틀린 위치 기반 인자와 이름 붙은 인자  (0) 2023.12.17
코틀린 로컬 함수  (0) 2023.12.17
코틀린 익명 함수  (0) 2023.12.17
코틀린 고차 함수  (0) 2023.12.17