Skip to content

람다 표현식

람다는 익명 함수이며, 함수형 프로그래밍에서 자주 사용하는 패턴이다. 코틀린은 객체지향 프로그래밍 뿐만 아니라 함수형 프로그래밍 또한 지원하는 언어이기 때문에 당연히 람다 표현식을 사용할 수 있다.

익명함수 생성

익명함수는 아래처럼 이름없이 정의되는 함수를 말한다. 변수 printHello에 할당되고 있는 내용이 바로 익명함수이다.

// 익명함수를 생성하여 printHello에 할당
val printHello = fun(){ println("Hello, world!") }
// 익명함수 호출
printHello()

실행결과

Hello, world!

람다를 이용하면 더 간단히 익명함수를 정의할 수 있다. 아래는 위와 동일한 코드를 람다로 재작성 한 것이다.

// 익명함수를 생성하여 printHello에 할당
val printHello = () -> Unit = { println("Hello, world!") }
// 익명함수 호출
printHello()

인자가 있는 익명함수

fun main(args: Array<String>) {
// 익명함수를 생성하여 printHello에 할당
val printHello = { name: String, age:String -> "Hello. My name is $name. I'm $age year old" }
// 익명함수 호출
val result = printHello("김은빈", "17")
println(result)
}

익명함수에서도 인자를 받아 값을 반환할 수 있다.

->의 옆에 하나의 값이나 문장이 들어오면 return을 생략할 수 있다. 여러 줄의 코드가 들어가는 경우엔 중괄호를 넣어줘야한다. (자바와 같다)

fun main(args: Array<String>) {
val printHello: (String, String) -> String = { name, age -> "Hello. My name is $name. i'm $age year old" }
val result = printHello("김은빈", "17")
println(result)
}

함수의 인자, 반환 타입을 정의한 다음에 익명함수를 만드는 방법도 있다.

인자 선언 생략

val printHello: (String) -> String = { name -> "Hello. My name is $name."}
val result = printHello("김은빈")

인자가 1개일때는 아래와 같이 인자의 이름을 선언하지 않아도 된다.

val printHello: (String) -> String = { "Hello. My name is $it."}
val result = printHello("김은빈")

인자 name을 생략한 대신 it으로 인자에 접근하고 있다. 코틀린은 인자를 생략하는 경우 it으로 인자를 사용할 수 있다.