[코틀린] 람다식의 기본형태

에짱·2021년 8월 17일
0
post-thumbnail

코틀린을 사용하면서 우리는 자연스럽게 람다와 고차함수를 써왔는데요,
이론적으로 좀 더 살펴보도록 합시다.
그 전에 람다와 고차함수를 코틀린에서 왜 배워야 하는지? 왜 나오는 것인지 궁금하시다면 전 포스트를 읽어주세요!

람다식 기본 형태

변수에 할당하는 람다식 함수

fun main() {
	var result : Int
	val multi = {x : Int, y : Int -> x * y }
	result = multi(10, 20)
	println(result) //200
}

변수 multi 에는 람다식이 할당되어 있습니다. multi 를 좀 더 풀어 써보면 다음과 같습니다.

val multi : (Int, Int) -> Int = {x:Int, y:Int -> x *y }

람다식을 하나씩 뜯어보면,

(Int, Int) -> Int

'람다식의 자료형 선언' 으로 매개변수에 자료형이 명시된 경우 생략 가능합니다.

{x : Int, y : Int  -> x * y }

->의 앞 부분은 '람다식의 매개변수' 로 선언 자료형이 명시되어 있으면 :Int 가 생략 가능합니다.

val multi : (Int, Int) -> Int = {x:Int, y:Int -> x *y } //생략되지 않은 전체 표현
val multi = {x:Int, y:Int -> x *y } //선언 자료형 생략
val multi: (Int, Int) -> Int = {x, y -> x *y } //람다식 매개변수 자료형의 생략

하지만, 둘 다 생략하는 경우 자료형 추론하기 어려워서 오류가 발생하므로 주의해야 합니다!

다음으로 -> 뒷 부분은 '람다식의 처리 내용' 으로 처리 내용, 즉 표현식이 여러 줄인 경우 마지막 표현식이 반환됩니다.

val multi2 : (Int, Int) -> Int = {x: Int, y: Int -> 
	println(" x* y ")
	x * y //마지막 표현식이 반환
}

반환 자료형이나 매개변수가 없는 람다식

val greet : () -> unit = {println("hello world!"}
val greet = {println("hello world!"} //추론가능

val nestedLambda : () -> () -> Unit = {{println("hello world!"}}
val nestedLambda : () -> () -> Unit = {{println("hello world!"}} //추론가능

그렇다면 반환 자료형이나 매개변수가 없는 경우는 어떻게 해야 될까요? 첫 번째 람다식에는 매개변수와 반환값이 없습니다. 람다식의 추론 가능한 부분을 생략하면 그 아래와 같이 사용할 수 있습니다.

세 번째 람다식은 잘 사용되지는 않지만, 람다식 안에 람다식을 넣은 경우입니다.

지금까지 살펴본 람다식은 어떻게 사용될까요? 위의 예시처럼 변수에 할당해서 사용할 수도 있지만, 고차함수와 자주 사용됩니다! 다음 포스트에서 람다식의 활용 사례들을 살펴볼 텐데 살짝쿵 맛보기를 보여드리도록 하겠습니다 ^^

매개변수에 람다식 함수를 이용한 고차함수

fun main() {
	var result : Int
	result = highOrder({x, y -> x + y}, 10, 20)
	println(result)
}

fun highOrder(sum : (Int, Int) -> Int, a : Int, b : Int) : Int {
	return sum(a, b)
}

highOrder 함수를 보면, 매개변수 a, b로 전달된 10, 20이 매개변수 sum으로 전달된 람다식에 들어가서 연산을 수행한 후 결과를 반환하고 있습니다. 즉, highOrder라는 고차함수에서 람다식을 인자로 받아 활용한 것이죠.

마무리

지금까지 간략하게 코틀린 람다식에 대해서 살펴보았는데요,
정리해보면

  1. 람다식의 자료형 선언과 매개변수의 자료형 선언은 둘 중 하나만 하면 된다.
  2. 람다식은 매개변수가 없거나 반환 자료형이 없을 수 있다.
  3. 람다식은 변수에 할당하거나 고차함수의 인자로 사용된다.

앞으로는 람다식의 쓰임과 활용에 대해서 더 살펴보도록 하겠습니다!

위 포스트는 Do it! 코틀린 프로그래밍 서적을 참고해서 쓰여졌습니다. 더욱 자세한 내용은 책을 참고해주세요!

profile
지금 여기. Here and Now

0개의 댓글