PHpullh
학습 라이브러리/Kotlin/확장 함수 (Extension Function)

KOTLIN · 함수

확장 함수 (Extension Function)

기존 클래스를 수정하지 않고 새 함수를 추가합니다. Kotlin 표준 라이브러리의 핵심 메커니즘입니다.

함수중급extension-function확장함수receiver

핵심 설명

기존 클래스를 수정하지 않고 새 함수를 추가합니다. Kotlin 표준 라이브러리의 핵심 메커니즘입니다.

Kotlin code

// String 확장 함수
fun String.isValidEmail(): Boolean =
    contains("@") && contains(".") && length > 5

// Int 확장 함수
fun Int.isEven() = this % 2 == 0
fun Int.factorial(): Long {
    if (this < 0) throw IllegalArgumentException("음수 불가")
    return (1..this).fold(1L) { acc, n -> acc * n }
}

// Nullable 수신자
fun String?.orEmpty(): String = this ?: ""

// Generic 확장 함수
fun <T> List<T>.secondOrNull(): T? =
    if (size >= 2) this[1] else null

fun main() {
    println("dev@kotlin.io".isValidEmail())  // true
    println(4.isEven())                       // true
    println(5.factorial())                    // 120

    val nullStr: String? = null
    println(nullStr.orEmpty())               // ""

    println(listOf(1, 2, 3).secondOrNull())  // 2
    println(listOf(1).secondOrNull())        // null
}

학습 팁

확장 함수는 정적 디스패치됩니다. 오버라이드가 불가하며, 멤버 함수와 이름이 충돌하면 항상 멤버 함수가 우선합니다.

주의할 점

확장 함수에서는 private/protected 멤버에 접근할 수 없습니다. 내부 구현에 접근해야 한다면 클래스 내부 멤버 함수로 작성해야 합니다.

자주 묻는 질문

확장 함수 (Extension Function)란 무엇인가요?

기존 클래스를 수정하지 않고 새 함수를 추가합니다. Kotlin 표준 라이브러리의 핵심 메커니즘입니다.

확장 함수 (Extension Function) 학습 시 주의할 점은 무엇인가요?

확장 함수에서는 private / protected 멤버에 접근할 수 없습니다. 내부 구현에 접근해야 한다면 클래스 내부 멤버 함수로 작성해야 합니다.