단 하나의 추상화 함수를 가지고 있는 함수형 인터페이스를 뜻한다.
다음과 같은 형태이다.
fun interface KRunnable {
abstract(생략가능) fun invoke()
}
// 일반 interface
interface IntPredicate {
fun accept(i: Int): Boolean
}
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
일반적으로 interface의 함수를 사용하려면 객체 생성후 오버라이딩하여 해당 함수를 구현해야 한다.
// SAM
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
val isEven = IntPredicate { it % 2 == 0 }
위와 같이 SAM을 사용하게 된다면 간단한 람다식으로 표현이 가능해진다. 이 얼마나 심플하고 아름다운가!!
단, 인터페이스 내부에 함수가 하나만 존재할 때 사용이 가능하다는 점!!