코틀린에서 SAM 인터페이스 정의: fun interface

유우선·2026년 2월 3일

Kotlin Study📚

목록 보기
11/32

개요

함수형 인터페이스에 대해 함수 탕비을 사용해 행동을 표현할 때가 자주 있음

  • 타입 별명을 통해 이해하기 좋은 이름을 부여하기

fun interface를 사용해 함수형 인터페이스를 정의할 수 있음


코틀린의 함수형 인터페이스 → 정확히 하나의 추상 메서드만 포함함

  • 다른 비 추상 메서드는 여러개 가질 수 있음
  • 함수 타입의 시그니처에 들어맞지 않는 복잡한 구조를 표현할 수 있음
fun interface IntCondition {
	fun check(I: Int) : Boolean // 추상 메서드
	fun checkString(s: String) = check(s.toInt()) // 비추상 메서드
	fun checkChar(c: Char) = check(c.digitToInt()) // 비추상 메서드
}

fun main() {
	val isOdd = IntCondition { it % 2 != 0 }
	println(isOdd.check(1))
	// true
	println(isOdd.checkString("2"))
	// false
	println(isOdd.checkChar('3'))
	// true
}
  • fun interface ~ 라고 정의된 타입의 파라미터를 받는 함수
    • 람다 구현이나 람다에 대한 참조를 직접 넘길 수 있음
    • 두 경우 모두 동적으로 인터페이스 구현을 인스턴스화 해줌

함수형 인터페이스의 동적 인스턴스화

fun interface IntCondition {
    fun check(I: Int) : Boolean // 추상 메서드
    fun checkString(s: String) = check(s.toInt()) // 비추상 메서드
    fun checkChar(c: Char) = check(c.digitToInt()) // 비추상 메서드
}

fun checkCondition(i: Int, condition: IntCondition): Boolean {
    return condition.check(i)
}

fun main() {
    println(checkCondition(1) { it % 2 != 0 }) //람다를 직접 사용
		// true
    val isOdd: (Int) -> Boolean = { it % 2 != 0 } // 시그니처가 일치하는 람다에 대한 참조식 사용
    println(checkCondition(1, isOdd))
		// true
}

0개의 댓글