오직 하나의 abstract method 를 가진 인터페이스를 functional interface
또는 Single Abstract Method(SAM) interface
라고 부릅니다.
kotlin 에선 함수형 인터페이스를 선언하기 위해 fun
제어자를 사용합니다.
fun interface KRunnable {
fun invoke()
}
SAM 변환은 람다 표현식
을 사용함으로써 코드를 더 간결하게 나타낼 수 있습니다.
예를 들어, 아래와 같은 함수형 인터페이스가 있습니다.
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
SAM 변환을 사용하지 않는다면 아래와 같습니다.
val isEven = object: IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
위와 같은 코드를 SAM 변환으로 바꾼다면 아래와 같이 훨씬 간결한 코드를 사용할 수 있습니다.
val isEven = IntPredicate { it % 2 == 0 }