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 멤버에 접근할 수 없습니다. 내부 구현에 접근해야 한다면 클래스 내부 멤버 함수로 작성해야 합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.