Kotlin/포스팅

코틀린 확장 함수

짜집퍼박사(짜박) 2023. 12. 31. 03:01

코틀린의 확장 함수(Extension Functions)는 기존 클래스의 멤버 함수를 추가할 수 있는 강력한 기능입니다. 확장 함수를 사용하면 기존 클래스의 코드를 변경하지 않고 새로운 함수를 추가할 수 있어 유연하고 간결한 코드를 작성할 수 있습니다.

 

확장 함수의 선언

확장 함수는 다음과 같이 선언됩니다.

fun ClassName.extensionFunctionName(parameters: ParameterType): ReturnType {
    // 함수의 내용
}

- ClassName: 확장할 클래스의 이름입니다.
- extensionFunctionName: 확장 함수의 이름입니다.
- parameters: 함수의 매개변수입니다.
- ReturnType: 함수의 반환 타입입니다.

 

확장 함수의 예제

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

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

위의 예제에서 addExclamation은 String 클래스에 새로운 멤버 함수처럼 보이지만, 실제로는 확장 함수입니다. 이로써 모든 String 인스턴스에서 addExclamation 함수를 호출할 수 있게 되었습니다.

 

확장 함수 호출

val original = "Hello"
val result = original.addExclamation()
println(result)  // 출력: Hello!

확장 함수는 일반적인 멤버 함수처럼 호출됩니다.

 

Nullable 타입의 확장 함수

fun String?.safeLength(): Int {
    return this?.length ?: 0
}

fun main() {
    val nullableString: String? = null
    val length = nullableString.safeLength()
    println(length)  // 출력: 0
}

위의 예제에서 safeLength 함수는 String? 타입의 확장 함수로, nullable한 문자열에 대해서도 안전하게 길이를 반환합니다.

 

수신 객체(this) 활용

확장 함수 내에서 this를 사용하여 수신 객체에 접근할 수 있습니다.

fun String.printWithPrefix(prefix: String) {
    println("$prefix$this")
}

fun main() {
    val message = "World"
    message.printWithPrefix("Hello, ")  // 출력: Hello, World
}

위의 예제에서 printWithPrefix 함수는 문자열을 받아서 주어진 접두사와 함께 출력하는 확장 함수입니다.

확장 함수는 클래스의 내부에 직접적으로 추가되는 것이 아니라, 외부에서 정의되며 해당 클래스의 인스턴스에서 마치 내부 멤버인 것처럼 사용할 수 있습니다. 이를 통해 기존 클래스의 수정 없이 새로운 기능을 추가할 수 있어 코드의 확장성과 유지보수성을 높일 수 있습니다.

 

With ChatGPT

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

코틀린 동반 확장  (0) 2023.12.31
코틀린 확장 프로퍼티  (0) 2023.12.31
코틀린 비지역적 제어 흐름  (0) 2023.12.31
코틀린 인라인 함수와 프로퍼티  (0) 2023.12.31
코틀린 호출 가능 참조  (0) 2023.12.31