Higher-Order Function
고차 함수(Higher-Order Function)는 Functional Programming을 할 때 많이 사용한다.
아래 중 하나 이상을 만족하면 고차 함수로 볼 수 있다.
• 함수를 인자로 받는다.
• 함수를 결과로 반환한다.
Java 8 ver.에서 람다를 발표하기 이전에는 함수를 매개변수로 전달하기 위해 해당 함수가 선언된 인터페이스를 구현한 클래스를 정의하고 객체를 생성하여 그 객체를 매개변수로 전달하는 방법을 주로 사용했다.
Java에서 많이 봤던 setOnclickListner 같은 콜백 함수가 고차 함수에 속한다.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Lambda Expression
람다 함수는 중괄호({ }) 안에 매개변수와 함수 내용을 선언하는 함수로 아래 규칙에 따라 정의한다.
• 람다 함수는 항상 { }으로 감싸서 표현해야 한다.
• { } 안에 -> 표시가 있으며 -> 왼쪽은 매개변수, 오른쪽은 함수 내용이다.
• 매개변수 타입을 선언해야 하며 추론할 수 있을 때는 생략할 수 있다.
• 함수의 반환값은 함수 내용의 마지막 표현식이다.
람다식의 기본 구문 형태이다.
val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
위의 예제 코드에서 생략 가능한 코드를 모두 생략한다면 아래의 형식이 된다.
val sum = { x, y -> x + y }
예)
fun sum(a: Int, b: Int, div: (Int, Int) -> Int){
return a + b + div(20, 10)
}
fun main(){
val result = sum(1, 2, {x, y -> x / y})
println("result = $result")
}
// result = 5
고차 함수에서는 람다식의 형식 ex) (Int, Int) -> Int 을 반드시 명시해야 하며,
고차 함수에 명시된 형식과 동일한 형식의 람다식만 전달할 수 있다.
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Collections(List, Set, Map) (0) | 2021.10.24 |
---|---|
[Kotlin] 코틀린 null 처리 - Safe call, non-null, Elvis operator (0) | 2021.10.24 |
[Kotlin] Extension Function(확장 함수) (0) | 2021.09.07 |
댓글