728x90
반응형
고차함수
: 함수를 마치 클래스에서 만들어 낸 인스턴스처럼 취급하는 방법. 함수를 파라미터로 넘겨줄 수도 있고 결과값으로 반환받을 수도 있다.
코틀린에서는 모든 함수를 고차함수로 사용 가능하다.
- 함수의 형식은 (자료형, 자료형, …) → 자료형으로 나타낸다.
- 일반 함수를 고차 함수로 변경해주는 연산자 - 함수 이름 앞에 콜론 두 개 (::함수명)
fun main(){
b(::a) // 출력: b가 호출한 함수 a
}
fun a(str: String){
println("$str 함수 a")
}
fun b(function: (String) -> Unit){
function("b가 호출한")
}
- Unit: 값이 없다는 형식
패러미터로 넘길 함수를 굳이 이름까지 붙여 따로 만들 필요가 있을까?
→ 함수를 람다식으로 표현
람다함수
람다함수는 일반함수와 달리 그 자체가 고차함수이기 때문에 별도의 연산자 없이도 변수에 담을 수 있다.
fun main(){
val c: (String) -> Unit = { str -> println("$str 람다함수") }
// * str은 String으로 받아온 값을 람다함수 내에서 사용할 변수 이름
b(c) // 출력: b가 호출한 람다함수
}
fun b(function: (String) -> Unit){
function("b가 호출한")
}
람다함수를 변수에 할당할 때는 타입추론 기능을 이용하여 좀 더 축약해서 기술할 수 있다.
→ 함수의 형식을 적지 않고 중괄호 안에 파라미터의 자료형 기술
fun main(){
val c = { str:String -> println("$str 람다함수") }
b(c) // 출력: b가 호출한 람다함수
}
fun b(function: (String) -> Unit){
function("b가 호출한")
}
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 오브젝트 (0) | 2023.09.09 |
---|---|
[Kotlin] 스코프 함수 (0) | 2023.09.07 |
[Kotlin] 스코프와 접근제한자 (0) | 2023.09.06 |
[Kotlin] 기본 프로젝트 구조 (0) | 2023.09.05 |
[Kotlin] 오버라이딩, 추상화, 인터페이스 (0) | 2023.09.05 |