본문 바로가기
코딩테스트 준비(kotlin)/문법정리

[kotlin] 람다표현식

by 1chanhue1 2023. 8. 6.

람다표현식

 

1. 익명함수이다( 함수에 이름이 없다)


 2. 변수처럼 사용돼서 함수의 argument, return 이 될 수 있다. 

      - 함수의 들어가는 argument가 변수가 아니고 함수가 들어갈 수 있다

      - return 값이 변수가 아닌 함수가 나올 수 있다.

        우선 Parameter와 Argument의 차이를 알아보자
        Parameter는 함수를 정의할 때 사용되는 변수를 의미한다.
        Argument는 실제로 함수가 호출될 때, 넘기는 변수값을 의미한다.

val b: (Int) -> Int = { it * 10 }  // 입력값이 하나 일 경우에 it으로 받을 수 있다. 함수 맨 마지막 줄에 오는 것이 return 값이다.
val c = { i: Int, j: Int -> i * j } // 타입을 생략을 하고 함수 구현부에 타입을 넣을 수 있다.
val d: (Int, Int, Int) -> Int = { a, b, c -> a * c }

 

3. 익명함수 언제 많이 쓰나? 한번만 사용되고, 재사용되지 않는 함수를 사용할 때

 

 

람다 함수 사용 예시

- 람다 함수 선언 후 바로 호출(변수를 대입)하는 방법

var sum = { num1: Int, num2: Int -> num1 + num2 } (100, 200) // 람다 함수
println(sum) // 출력값 300

- 파라미터가 없는 람다함수

var a = { -> println("hello world1") }
var b = { println("hello world2") }
var c = fun(){println("hello world3")}


a()  //호출하기  출력값 hello world1
b()  //호출하기  출력값 hello world2
c()  //호출하기  출력값 hello world3

- 파라미터(입력값)를 하나만 가지는 람다함수

var lam1 = { num: Int -> println(num) }
lam1(100) // 100

var lam2: (Int) -> Unit = { println(it) } // 함수 타입 사용
lam2(100) // 100

val lam3: (Int) -> Int = { it * 10 }  // 입력값이 하나 일 경우에 it으로 받을 수 있다. 
                                      // 함수 맨 마지막 줄에 오는 것이 return 값이다.
println(lam3(100)) //1000

- 람다함수의 반환

람다함수는 리턴을 사용할 수 없음

람다 함수의 반환 값은 본문의 가장 마지막 줄

val lambda = { num1: Int, num2: Int ->
    println("output")
    num1 * num2
}
println(lambda(3, 10))
//출력
//output
//30

 

 

 

출처 - Do it 코틀린 프로그래밍 강의 https://youtu.be/z8prdZgk4kA

val first: (Int, Int) -> Int = { x: Int, y: Int -> x * y }  //전체 표현
val second = { x: Int, y: Int -> x * y } //선언 자료형 생략
val third: (Int, Int) -> Int = { x, y -> x * y }    //람다식 매개변수 자료형 생략

val fourth = {x, y -> x * y} //선언 자료형과 람다식 매개변수 자료형 둘다 생략하면 컴파일 오류