본문 바로가기

Kotlin

함수형 인터페이스 consumer, supplier, Function

반응형

Java의 함수형 인터페이스인 Consumer, Supplier, 그리고 Function은 각각 특별한 유형의 작업을 수행하기 위해 사용됩니다. 아래에서 이들 각각에 대해 살펴보고 코틀린에서 어떻게 사용할 수 있는지 알아보겠습니다

1. Consumer
Consumer 인터페이스는 입력을 받고 아무런 결과도 반환하지 않는 accept(T t) 메서드를 가집니다. 다시 말해, 이 함수형 인터페이스는 입력을 "소비"합니다.

fun consume(consumer: (T) -> Unit, input: T) {
consumer(input)
}

fun main() {
val printConsumer: (String) -> Unit = { println(it) }
consume(printConsumer, "Hello, Consumer!")
}

여기서 consume 함수는 람다 consumer와 입력 input을 인자로 받아 consumer에 input을 적용합니다. 람다 printConsumer는 문자열을 인자로 받아 콘솔에 출력합니다.

2. Supplier
Supplier 인터페이스는 인자 없이 결과를 제공(혹은 "공급")하는 get() 메서드를 가집니다.

fun supply(supplier: () -> T): T {
return supplier()
}

fun main() {
val stringSupplier: () -> String = { "Hello, Supplier!" }
println(supply(stringSupplier))
}

 

supply 함수는 람다 supplier를 인자로 받아 그것을 호출하여 결과를 반환합니다. 람다 stringSupplier는 인자 없이 문자열을 반환합니다.

3. Function<T, R>
Function<T, R> 인터페이스는 인자 T를 받아 R 결과를 반환하는 apply(T t) 메서드를 가집니다.

fun <T, R> applyFunction(function: (T) -> R, input: T): R {
return function(input)
}

fun main() {
val upperCaser: (String) -> String = { it.uppercase() }
println(applyFunction(upperCaser, "Hello, Function!"))
}

 

applyFunction 함수는 람다 function과 입력 input을 인자로 받아 function에 input을 적용하여 그 결과를 반환합니다. 람다 upperCaser는 문자열을 입력받아 대문자로 변환된 결과를 반환합니다.

이런 예제들을 통해 코틀린에서는 람다 표현식을 이용해 자바의 함수형 인터페이스를 간결하고 표현력 있게 사용할 수 있음을 확인할 수 있습니다. 이와 같은 방법으로 코틀린에서 자바의 다른 함수형 인터페이스들도 사용할 수 있습니다.

반응형