기록
[코틀린/Kotlin] 고차함수와 람다함수 본문
반응형
1. 고차함수
함수를 마치 클래스에서 만들어낸 인스턴스처럼 취급하는 방법.
함수를 '파라미터'로 넘겨 줄 수도 있고, '결과값으로 반환'받을 수도 있는 방법이다.
코틀린에서는 모든 함수를 고차함수로 사용 가능하다.
함수의 형식을 자료형으로 나타내는 방법
(파라미터 자료형들) -> 반환형
고차함수 형태로 파라미터를 넘기는 방법은 함수 이름 앞에 콜론을 두개 붙인다.
::는 일반함수를 고차함수로 변경해주는 연산자이다.
fun main() {
b(::a)
}
fun a(str: String) {
println("$str 함수 a")
}
fun b(function: (String)->Unit) {
function("b가 호출한")
}
2. 람다함수
파라미터로 넘길 함수를 굳이 이름까지 붙여 만들어줄 필요가 있을까?
이때 함수를 람다식으로 표현하는 람다함수를 사용할 수 있다.
람다함수는 일반함수와 달리 그 자체가 고차함수이기 때문에 별도의 연산자 없이 변수에 담을 수 있다.
fun main() {
b(::a)
// 변수 c를 생성하여 콜론 뒤에 함수의 형식을 써본다.
// = 뒤에 중괄호를 붙여 파라미터로 받아온 String을 매칭할 변수 이름을 써준다
// (* str은 String으로 받아온 값을 람다함수 내에서 사용할 변수 이름이다.)
// 이 파라미터로 동작시킬 구문을 기술하기 위해 -> 를 써주고 그 뒤에 출력문을 써본다.
var c: (String)->Unit = {str -> println("$str 람다함수")}
b(c)
}
fun a(str: String) {
println("$str 함수 a")
}
fun b(function: (String)->Unit) {
function("b가 호출한")
}
람다함수 역시 변수에 할당할 때는 이전에 배운 타입추론 기능을 이용해 좀 더 축약해서 기술할 수 있다.
fun main() {
b(::a)
// 함수의 형식(자료형)을 기술하지 않고 람다식 안에 파라미터의 자료형을 기술하면
// 파라미터와 리턴값의 형식이 자동으로 추론된다.
var c = {str: String -> println("$str 람다함수")}
b(c)
}
fun a(str: String) {
println("$str 함수 a")
}
fun b(function: (String)->Unit) {
function("b가 호출한")
}
고차함수와 람다함수를 사용하면 함수를 일종의 변수로 사용할 수 있다.
이후 배울 컬렉션의 조작이나 스코프 함수의 사용에도 도움이 된다.
https://www.youtube.com/watch?v=q7GV68jKLVM&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=14
위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.
반응형
'[Study] > Kotlin' 카테고리의 다른 글
[코틀린/Kotlin] Object, Companion Object (0) | 2022.05.08 |
---|---|
[코틀린/Kotlin] 람다함수의 특별한 케이스(it), 스코프 함수(apply, run, with, also, let) (0) | 2022.05.07 |
[코틀린/Kotlin] 접근범위와 접근제한자 (0) | 2022.05.06 |
[코틀린/Kotlin] 기본 프로젝트 구조 (0) | 2022.05.06 |
android 색상이 안먹을 때 (0) | 2021.09.27 |