본문 바로가기
Programming Language/Kotlin

[코틀린 Kotlin] 람다식 사용법(예제 코드)

by ggyongi 2021. 6. 14.
반응형

람다식은 코틀린이 가지고 있는 특별한 함수의 형태다.

람다식을 적절히 이용하면 훨씬 간결한 코드 작성이 가능하다.

 

<람다식이란>

다음 코드는 람다식의 기본적인 예시이다.

result1, result2, result3는 모두 동일한 결과를 갖게 된다.

// 일반 함수 활용
fun add1(a:Int, b:Int):Int{
    return a+b
}
val result1 = add1(10,10)

fun add2(a:Int,b:Int) = a+b
val result2 = add2(10,10)


//람다식 활용
val add3 = {a:Int, b:Int -> a+b}
val result3 = add3(10,10)

add3라는 변수는 람다식을 할당받았다. 이렇게 람다식은 함수의 의미를 갖지만 변수에 할당이 가능하다. 

람다식은 기본적으로 {    ->   } 를 사용하며 화살표 좌측이 대입할 변수, 화살표 우측이 반환 값을 뜻한다.

그리고 사용할 때는 변수지만 함수를 포함하므로 변수이름 뒤에 ( )를 붙이고 그 안에 인자를 넣어준다.

 

 

<다양한 람다식의 형태>

fun main(){
    var result: Int
    val multi = {x: Int, y: Int -> x*y}
    result = multi(20,30)
    println(result)
}
# 생략 없는 기본형
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 multi = {x,y -> x*y}

 

 

<람다식의 활용>

val addFunc = {a:Int, b:Int -> a+b}  // 람다식을 만들어서 변수에 할당, 변수지만 함수의 역할을 함
val subFunc = {a:Int, b:Int -> a-b}  // 람다식을 만들어서 변수에 할당, 변수지만 함수의 역할을 함

fun cal(a:Int, b:Int, oper:(Int, Int) -> Int):Int { //oper라는 파라미터의 자료형은 함수
    return oper(a,b)
}

val result1 = cal(10,10,addFunc)
val result2 = cal(10,10,subFunc)

아래와 같이 어떤 함수의 반환값으로 람다식함수를 넘겨줄 수도 있다. 위 코드와 아래 코드는 동일한 결과를 나타낸다.

fun getOper(name:String): ((Int, Int)->Int)?{  // 함수의 반환값의 자료형은 람다식함수
    var oper: ((Int,Int)->Int)? = null
    if (name == "add"){   // name에 따른 람다식 을 oper에 할당
        oper = {a:Int, b:Int -> a+b}
    }else if (name == "subtract") {
        oper = {a:Int, b:Int -> a-b}
    }
    return oper   // 함수를 반환
}

val addFunc = getOper("add")
val subFunc = getOper("subtract")

fun cal(a:Int, b:Int, oper:(Int, Int) -> Int):Int {
    return oper(a,b)
}

val result1 = cal(10,10,addFunc!!)
val result2 = cal(10,10,subFunc!!)

 

더 간단하게는 아래와 같이 작성이 가능하다.

함수를 사용할 때 그 함수의 마지막 인자가 람다식이라면 그 인자를 따로 빼서 { } 에 람다식으로 작성할 수 있다.

 fun cal(a:Int, b:Int, oper:(Int, Int) -> Int):Int {
            return oper(a,b)
        }
val result1 = cal(20,10){a:Int, b:Int -> a+b}
val result2 = cal(20,10){a:Int, b:Int -> a-b}
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글