하나의 추항 메소드만 가진 인터페이스를 functional interface, 혹은 Single Abstract Method (SAM) interface 라고 한다.
View.OnClickListener
, Runnable
등의 인터페이스가 하나의 메소드만 가진다.기본 형식은 이렇다.
fun interface KRunnable {
fun invoke()
}
SAM conversion을 사용하지 않은 것과, 사용 한 것의 코드 차이를 보자.
// SAM conversion 쓰지 않음
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
// SAM conversion + lambda
val isEven = IntPredicate { it % 2 == 0 }
SAM과 람다식으로 더 간단하게 사용이 가능하다😮