DEV Community

sunj
sunj

Posted on

Kotlin Lamda, 2024-03-18

람다식은 우리가 마치 value처럼 다룰 수 있는 익명 함수

1) 메소드의 파라미터로 넘겨줄 수 있다
2) return 값으로 사용할 수 있다

//람다의 기본 정의
val lamdaName : Type = { argumentList -> codeBody }
Enter fullscreen mode Exit fullscreen mode
//첫 번째
val square : (Int) -> (Int) = { number -> number*number }
//두 번째
val square = { number : Int -> number*number }

fun main(){
   println(square(12))
}
Enter fullscreen mode Exit fullscreen mode
val square = { number : Int -> number*number }
val nameAge = { name : String, age : Int -> "My name is ${name} I'm ${age}"
}

fun main(){
   println(square(12))
   println(nameAge("example", 50))
}
Enter fullscreen mode Exit fullscreen mode

타입 추론 가능 하려면 어떻게 써야 하는 지
중괄호 사용 시 함수도 똑같이 변수 안에 넣을 수 있다

fun main(){
   val a = "A said"
   val b = "B said"

   //String class 사용
   println(a.pizzaIsGreat())
   println(b.pizzaIsGreat())
}

//this는 String 오브젝트 그 자체를 가르킴
val pizzaIsGreat : String.() -> String = {
   this + "Pizza is the best!"
}
Enter fullscreen mode Exit fullscreen mode

확장 함수 예시

fun main(){
   println(extendString("C", 66))
}

//this가 가르키는 것은 확장 함수가 불러줄 오브젝트 
fun extendString(name : String, age : Int ) : String {
   val introduceMyself : String.(Int) -> String = {"I'm ${this} and ${it}years old"}
   return name.introduceMyself(age)
}
Enter fullscreen mode Exit fullscreen mode

파라미터가 하나 일 때 it을 사용 가능

fun main(){
   println(calculateGrade(66))
}

// 파라미터가 여러 개일 경우를 대비해서 소괄호 써줌
val calculateGrade : (Int) -> String = {
   when(it){
      in 0..40 -> "fail"
      in 41.70 -> "pass"
      in 71..100 -> "perfect"
      else -> "Error" //else를 써주지 않으면 에러 발생
   }
}
Enter fullscreen mode Exit fullscreen mode
fun main(){
   val lamda = { number : Double -> number == 4.3213 }
   println(invokeLamda(lamda))

   println(invokeLamda({true}))
   println(invokeLamda({ it > 3.22 }))

   // 마지막 파라미터
   println(invokeLamda{ it > 3.22 })
}

//파라미터를 넣는 람다식
fun invokeLamda( lamda : (Double) -> Boolean ) : Boolean {
   return lamda(5.2343)
}
Enter fullscreen mode Exit fullscreen mode

function의 마지막 파라미터가 람다식일 때 생략이 가능


button.setOnClickListener{
   //to do
}

Enter fullscreen mode Exit fullscreen mode

코틀린 인터페이스가 아닌, 자바 인터페이스여야 함
인터페이스는 딱 하나의 메소드를 가져야 함

익명 내부 함수는 람다식으로 표현을 위의 조건 두 개 충족

참조 : Code with Joyce

Top comments (0)