본문 바로가기
Android(Kotlin)

[Kotlin Android] 람다식

by 클리마 2022. 5. 27.
728x90

오늘은 함수형 프로그래밍의 꽃인 람다식에 대해 정리해보고자 합니다. 람다식은 무궁무진하기 때문에 이 글이 완전하지 않음을 미리 알려드립니다. 더 추가하면 좋을 내용은 댓글로 알려주시면 감사하겠습니다!!


람다식은 기본적으로 value인 것처럼 다룰 수 있는 익명함수입니다.

  • 사용방법
    1. 메소드의 파라미터 역할
    2. return 값
  • 기본정의
val lambdaName: Type = {argumentList -> codeBody}

Ex>

val square: (Int) -> Int = {number -> number * number}
/*or*/ 
val square = {number: Int -> number * number}

//Compile Error! -> 컴파일러가 타입추론을 할 수 없기 때문에 에러 생성
//val square = {number -> number * number}

> 확장함수

기존 클래스에 없는 기능을 개발자가 직접 함수를 만들어서 추가할 때 사용합니다.
아래 코드는 String 클래스에서 사용할 수 있는 pizzaIsGreat()메소드를 만든 예시입니다.

val pizzaIsGreat: String.() -> String = {
    "$this Pizza is the best!"
}

fun main(){
    val a = "JK said"
    println(a.pizzaIsGreat())   // JK said Pizza is the best!
}

아래 코드는 introduceMySelf 변수를 리턴하는 메소드를 만든 예시입니다.

fun extendString(name: String, age: Int): String{
    val introduceMySelf: String.(Int) -> String = {
        "I am ${this} and ${it} years old"}
    // this는 이 함수를 호출하는 변수
    // it은 .(Int)처럼 param이 하나일 때 사용 가능
    return name.introduceMySelf(age)
}

fun main(){
    println(extendString("timo", 24))   // I am timo and 24 years old
}

>람다에서 when 사용하기

람다에서는 return 값을 명확히 지정해줘야 합니다.

val calculateGrade: (Int) -> String = {
    when(it) {
        in 0..40 -> "fail"
        in 41..70 -> "pass"
        in 71..100 -> "perfect"
        else -> "Error"
// 만약 else문이 없으면 0..100 이외에 숫자를 입력받았을 때 return 값이 없어지기 때문에 Syntax Error 발생
    }
}

> 익명내부함수

익명내부함수를 람다식으로 이용할 수 있는데 조건이 있습니다.

  1. Kotlin interface가 아닌 자바 interface여야 한다.
  2. 그 interface는 딱 하나의 메소드만 가져야 한다.

Ex>

button.setOnclickListener{ object: View.OnClickListener{
    override fun Onclik(p0: View?){
        // TODO
    }
} }
//익명내부함수
button.setConclickListener{
    // TODO
}

지금까지 람다식에 대해 알아보았는데 공부하면서 정말 많은 곳에 쓰일 수 있고 프로그래밍을 간편하게 만들어주는 기능이라고 생각이 들었습니다.

더 공부하면서 람다식에 대해 정리할 수 있는 것이 있다면 추가해보도록 하겠습니다. 감사합니다.

728x90