[목표]
SAM Interface 이해
[참고]
Functional (SAM) interfaces | Kotlin
kotlinlang.org
What is SAM?
SAM은 Single Abstraction Method의 약자로 하나의 추상 메소드를 가지는 것을 의미합니다. Kotlin에서는 이런 SAM interface를 functional interface라고 부릅니다. Functional Interface는 여러 non-abstract member(0..N개)를 가질 수 있지만, 오직 하나의 abstract member만 가질 수 있습니다.
일반적으로 인터페이스를 선언하고, 인터페이스를 구현하는 클래스를 상속하여 사용하는 것과 달리 Functional Interface는 람다 표현식을 통해 아래와 같이 간단하게 구현될 수 있습니다.
package main.etc
fun main() {
val isEven = IntPredicate {
it % 2 == 0 // accept method 구현체
}
isEven.accept(10)
}
fun interface IntPredicate {
fun accept(i: Int): Boolean // 무조건 1개의 abstract method가 있어야 함
fun print() { // 있어도 되고 없어도 됨
println("non abstract method")
}
}
Functional Interface로 구현 시, IntelliJ에서 위와 같이 functional interface(2번째 요소)가 추가되어 보여지는 것을 확인할 수 있습니다. 클래스나 object expression을 이용해서 구현하는 방법은 아래와 같습니다.
클래스로 구현
class IntPredicateClass : IntPredicate {
override fun accept(i: Int): Boolean = (i % 2 == 0)
}
val isEven = IntPredicateClass()
object expression 활용
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
'#BASIC' 카테고리의 다른 글
[Algorithm] Binary Search (이진검색) (0) | 2022.03.01 |
---|---|
[ETC] 성능 테스트를 위한 nGrinder 설치 및 사용해보기 (Docker) (0) | 2022.02.13 |
[Gradle] Java Platform plugin (0) | 2022.02.08 |
[Gradle] Custom Plugin 만들어보기 (0) | 2022.02.06 |
[Kotlin] fun interface (0) | 2022.02.05 |