lesson 14 고차함수와 람다함수
고차함수: 함수를 마치 클래스에서 만들어낸 인스턴스처럼 취급
=> 함수를 파라미터로 넘겨주거나 결과값으로 반환받을 수도 있음
람다함수(익명함수): 이름이 없는 함수. 파라미터와 반환값만 있음. 람다 함수는 일반 함수와 달리 그 자체가 고차함수다.
- 코틀린은 모든 함수를 고차함수로 구현 가능
고차함수와 람다함수 코드 예제
함수 생성 부
fun a (str : String){
println("${str} 함수 a입니다.")
}
fun b (function : (String) -> Unit){
function("함수 b에서 실행한")
}
fun printCal(a : Int, b : Int, function : (Int, Int) -> Int){
println(function(a,b))
}
fun emptyFun(function : () -> Unit){
function()
}
- 일반 함수 a를 생성한다.
- 함수 b에서 파라미터로 고차함수를 받을 수 있도록 설정. 들어올 고차함수는 function: (String) -> Unit 형태로, 함수 a와 형태가 동일하다. 이 때 Unit은 반환값이 없다는 것을 알려주는 키워드이다.
- (Int 두개를 파라미터로 받는 함수)와 (Int 두개를) 파라미터로 받는 함수 printCal을 만들었다.
- 파라미터와 반환형 모두 없는 함수를 받을 수 있는 함수 emptyFun을 만들었다.
main 부
fun main(){
// 고차함수
b(::a)
// val c: (String) -> Unit = {str -> println("${str} 람다 함수 c입니다.")}
var c : (String) -> Unit = {
println("${it} 람다 함수 c입니다.")
println("이런식으로 여러 문장 실행도 가능합니다.")}
b(c)
// Int 파라미터 2개, Int 형 반환
var add : (Int, Int) -> Int = { a, b ->
a+b
}
var minus : (Int, Int) -> Int = { a, b ->
a-b
}
printCal(10, 20, add)
printCal(10, 20, minus)
// 패러미터가 없는 경우
var emptyPara : () -> Unit = {println("패러미터가 없당")}
emptyFun(emptyPara)
}
- b(::a) => 함수 b에서 함수 a를 고차함수 형식의 패러미터로 받을 수 있도록 했다.
:: => 일반 함수를 고차 함수로 변경해 주는 연산자
이처럼 만들어진 a 함수를 사용하는 것도 가능하지만 람다함수로 b함수의 파라미터로 전달하는 것도 가능하다.
- 주석: var c: (String) -> Unit = {str -> println("${str} 람다 함수 c입니다.")}
=> var c는 String 파라미터를 가지고 반환이 없는 함수. { 함수 내용 } 형태임.
- var c : (String) -> Unit = { 문장.... } 이런식으로도 가능하다.
=>패러미터가 하나뿐이라면 그 패러미터는 키워드 it으로 부를 수 있다.
- 람다함수 add와 minus를 만들었다.
예제 처럼 Int형을 반환 하는경우 마지막 a+b의 계산값을 반환한다. 만약 return a+b로 명시하면 return' is not allowed here이라며 컴파일 오류가 발생한다.
- 람다함수 emptyPara를 만들었다. 이처럼 람다함수에 패러미터가 없다면?
=> 중괄호 안에 실행할 구문만 만들면 된다.
코드 실행 결과
학습 출처:
테크과학! DiMo-디모의 Kotlin 강좌 (lesson14)
(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)
구독과 좋아요 !