안드로이드

[안드로이드] Kotlin 고차함수& Lambda

이손안나 2022. 3. 28. 17:58

💡람다식 문법

  • 중괄호로 감싼다. 
  • 인자와 본문은 -> 로 구분.
  • 인자는 ()로 감싸지 않는다.
  • 인자는 타입을 생략 가능.
  • 변수에 람다식을 넣는 경우 인자의 타입 생략 불가.

 

고차함수 : 람다를 인자로 받거나 반환하는 함수 (함수를 함수의 매개변수로 받을 수 있고, 함수를 반환할 수 있는 함수)
fun main() {
	val res1 = sum(3,2)
    val res2 = mul(sum(2,2),3)
}

fun sum(a:Int,b :Int) = a+b
fun mul(a:Int,b :Int) = a*b

 

-> 좌측 : 함수의 파라미터를 괄호 안에 명시

-> 우측 : 함수의 반환 타입을 명시

 

() -> Unit : 매개변수도 없고, 반환값도 없음.

A.(B) -> C : 함수타입은 추가적인 수신자 타이블 가질 수 있음. 수산자 타입 객체에 매개변수 B타입의 값을 주면 C타입의 값을 반환.

 

💡ex)

button.setOnClickListener( View.OnClickListener() {
	override fun onClick(view:View!){
}) // 람다를 사용하지 않고 구현

button.setOnClickListener { v -> ...} // 람다 사용

 

Inline 함수 : 함수 선언 앞에 inline 예약어를 추가한 함수. 컴파일 단계에서 정적으로 포함되므로 실행 때 함수 호출 발생 X.
*고차함수에 람다 함수를 전달하고 이 람다 함수를 이용하는 코드가 많아져서 런타임 때 성능 문제가 발생 가능.