Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Streams
- JPA
- spring
- mysql
- offsetdatetime
- Kubernetes
- consumer
- CI
- entity graph
- transactionaleventlistener
- topic생성
- Spring JPA
- PAGING
- cd
- CodePipeline
- AWS
- API
- producer
- Entity
- mirror maker2
- Spring Data JPA
- ECS
- kafka
- git
- centos7
- bean
- QueryDSL
- spring kafka
- K8s
- Kotlin
Archives
- Today
- Total
Yebali
Kotlin의 고차함수와 람다함수 본문
고차 함수
함수를 마치 클래스에서 만들어 낸 '인스턴스'처럼 취급하는 방법이다.
함수를 파라미터로 전달할 수 있도 물론 반환 값도 받을 수 있다.
fun a (str:String) {
println("$str 함수 a")
}
// 'Unit'의 의미는 반환하는 값이 없다는 의미
fun b (function: (String) -> Unit) {
function("b가 호출한") //"b가 호출한"의 값이 함수 a에 전달되는 꼴
}
fun main() {
b(::a)
}
함수를 파라미터로 전달할 때에는 ':: + 함수명'의 형태로 전달한다.
b함수에 파라미터로 전달된 '::a'는 함수 a가 파라미터로 전달되었다는 의미이다.
람다 함수
위 고차 함수의 예제에서 파라미터로 전달할 함수에 이름까지 붙여주는 정성이 필요할까?
위의 a함수를 람다 함수로 만들어 같은 동작을 하는 코드를 만들어보자.
// 기존 a 함수
fun a (str:String) {
println("$str 함수 a")
}
fun b (function: (String) -> Unit) {
function("b가 호출한") //"b가 호출한"의 값이 함수 a에 전달되는 꼴
}
fun main() {
// (String)->Unit는 c가 람다 함수 타입임을 나타냄
var c:(String)->Unit = {str:String -> println("$str 람다함수")}
b(::a)
b(c)
}
참고로 타입 추론기능을 통해 아래의 코드를 좀 더 간단하게 구현할 수 있다.
//아래 세 함수는 모두 같은 함수이다.
var c:(String)->Unit = {str:String -> println("$str 람다함수")}
var c:(String)->Unit = {str -> println("$str 람다함수")}
var c = {str:String -> println("$str 람다함수")}
람다 함수의 몇가지 특징을 더 알아보면
- 람다 함수의 구문이 여러 줄이고 반환 값이 있는 경우에는 마지막 구문의 값이 반환된다.
val calculate: (Int, Int) -> Int = {a, b -> println(a) println(b) a+b // a + b 값이 반환된다. }
- 파라미터가 없는 람다함수는 실행할 구문들만 나열하면 된다.
val a:() -> Unit = {println("파라미터가 없어요")}
- 파라미터가 하나밖에 없다면 'it'키워드로 사용이 가능하다.
val c:(String) -> Unit = {println("$it 람다함수")}
'Kotlin' 카테고리의 다른 글
Kotlin의 제너릭 (0) | 2021.09.22 |
---|---|
Kotlin의 Static Method와 Function (0) | 2021.09.22 |
Kotlin의 스코프 함수 (0) | 2021.09.22 |
Kotlin의 추상화와 인터페이스 (0) | 2021.09.22 |
Kotlin의 클래스 (0) | 2021.09.22 |