PHpullh
학습 라이브러리/Kotlin/SAM 변환 (Single Abstract Method)

KOTLIN · 함수

SAM 변환 (Single Abstract Method)

Java의 단일 추상 메서드 인터페이스를 람다로 간결하게 구현합니다. Kotlin의 fun interface에서도 동일하게 동작합니다.

함수중급samfun-interfacelambda-conversionfunctional

핵심 설명

Java의 단일 추상 메서드 인터페이스를 람다로 간결하게 구현합니다. Kotlin의 fun interface에서도 동일하게 동작합니다.

Kotlin code

// Kotlin fun interface (SAM)
fun interface Transformer<T> {
    fun transform(input: T): T
}

fun interface Validator<T> {
    fun validate(value: T): Boolean
}

fun <T> applyAll(value: T, vararg transforms: Transformer<T>): T =
    transforms.fold(value) { acc, t -> t.transform(acc) }

fun main() {
    // SAM 변환: 람다를 인터페이스로
    val upper: Transformer<String> = Transformer { it.uppercase() }
    val trim: Transformer<String> = Transformer { it.trim() }

    println(applyAll("  hello world  ", trim, upper))
    // "HELLO WORLD"

    // Java Runnable도 SAM 변환
    val thread = Thread { println("별도 스레드 실행") }
    thread.start()

    val isPositive: Validator<Int> = Validator { it > 0 }
    println(isPositive.validate(5))   // true
}

학습 팁

Kotlin 인터페이스에서 SAM 변환을 사용하려면 반드시 fun interface로 선언해야 합니다. 일반 interface에는 적용되지 않습니다.

주의할 점

fun interface는 정확히 하나의 추상 메서드만 가져야 합니다. 메서드가 2개 이상이면 컴파일 오류가 발생합니다.

자주 묻는 질문

SAM 변환 (Single Abstract Method)란 무엇인가요?

Java의 단일 추상 메서드 인터페이스를 람다로 간결하게 구현합니다. Kotlin의 fun interface 에서도 동일하게 동작합니다.

SAM 변환 (Single Abstract Method) 학습 시 주의할 점은 무엇인가요?

fun interface 는 정확히 하나의 추상 메서드만 가져야 합니다. 메서드가 2개 이상이면 컴파일 오류가 발생합니다.