Backend/Kotlin

[Kotlin] 함수형 인터페이스

findmypiece 2021. 12. 31. 16:08
728x90

만약 병렬처리를 위해 매번 새로운 인스턴스를 생성해야 하고 생성해야 할 인스턴스에 메소드가 하나라면 함수형 인터페이스를 고려해볼 수 있다. 코틀린에서는 이를 SAM 인터페이스 라고도 부른다.

 

물론 고전적인 방식으로 함수 하나만 가지고 있는 클래스를 선언해서 인스턴스를 생성해서 사용해도 되지만 함수형 인터페이스를 사용할 경우  익명클래스를 정의할 필요없이 람다식으로 대체할 수 있어서 좀 더 깔끔하고 직관적으로 코드를 완성할 수 있다.

 

코틀린에서 함수형 인터페이스는 아래와 같이 사용한다. 만든다. interface 지시어 앞에 fun 만 붙여주면 된다.

함수형 인터페이스 선언

interface 지시어 앞에 fun 만 붙여주면 된다.

fun interface TestFunc {
    fun test(param1: String, param2: String): Boolean
}

함수형 인터페이스 호출

TestFunc {
    param1, param2 ->
        println(param1)
        println(param2)
        true
}.test("param1 str", "param1 str")

 

만약 함수가 2개 이상이라면 함수형 인터페이스로 만들 수 없고 일반적으로 익명클래스를 만드는 방식으로 아래와 같이 사용해야 한다.

인터페이스 선언

interface TestFunc {
    fun test1(param1: String, param2: String): Boolean
    fun test2(param1: String, param2: String): Boolean
}

인터페이스 호출

object: TestFunc {
    override fun test1(param1: String, param2: String): Boolean {
        println(param1)
        println(param2)
        return true
    }
    override fun test2(param1: String, param2: String): Boolean {
        println(param1)
        println(param2)
        return true
    }
}.test1("param1 str", "param1 str")
728x90