1) 람다식
객체지향 토대로 공부를 했다면, ”람다” 가 생소하게 다가올 수 있다.
코틀린은 객체지향 언어의 특징도 가지고 있고 함수형 언어의 특징도 가지고 있음
람다식은 함수형 프로그래밍에서 사용되는 대표적인 익명함수 익명함수 : 함수의 이름이 없음
람다식으로 선언을 하면, 하나의 변수처럼 사용 가능 함수의 argument 가 될 수 있고 함수의 return 값이 될 수 있음
package com.example.kotlin
fun main() {
// 1. 익명함수
// 2. 변수처럼 사용돼서, 함수의 argument, return 값
// 3. 한 번 사용되고, 재사용되지 않는 함수
val a = fun() { print("hello")
// ( argument type, ), -> return type = { 구현부 }
// 코드 구현부의 가장 마지막 부분이 리턴값
val b : (Int) -> Int = {
// print(it)
it * 10 // 리턴값
}
println(b) // Function1<java.lang.Integer, java.lang.Integer>
println(b(3)) // 30
// 어떤 입력값을 받을 지, 함수 구현부 내에 구현 가능
val c = { i : Int , k : Int -> i * k }
// 함수의 argument 는 여러 개일 수 있음
// val d : (Int, String, Boolean) -> String = { a, b, c -> b }
// a 와 c 를 사용하지 않을 것이면, 언더스코어(_)로 생략 가능
val d : (Int, String, Boolean) -> String = { _, b, _ -> b }
val result = hello(10, b) // 10 200
println(result)
}
// b 는 Int 를 argument로 받고, Int 를 반환하는 익명함수
fun hello(a:Int, b:(Int)->Int) : (Int) -> Int {
println(a)
println(b(20))
return b
}
부분으로 다시 보기
1-1) 람다식 (1)
// 1. 익명함수
// 2. 변수처럼 사용돼서, 함수의 argument, return 값
// 3. 한 번 사용되고, 재사용되지 않는 함수
val a = fun() { print("hello")
val 변수명 = fun() { 함수 구현부 }
1-2) 람다식 (2)
// 코드 구현부의 가장 마지막 부분이 리턴값
val b : (Int) -> Int = { it * 10 }
println(b) // Function1<java.lang.Integer, java.lang.Integer>
println(b(3)) // 30
val 변수명 : ( 아규먼트 타입, ) -> 리턴 타입 = { 구현부 }
// 함수의 argument 는 여러 개일 수 있음
// val d : (Int, String, Boolean) -> String = { a, b, c -> b }
// a 와 c 를 사용하지 않을 것이면, 언더스코어(_)로 생략 가능
val d : (Int, String, Boolean) -> String = { _, b, _ -> b }
1-3) 람다식 (3)
// 어떤 입력값을 받을 지, 함수 구현부 내에 구현 가능
val c = { i : Int , k : Int -> i * k }
val 변수명 = { 아규먼트 : 아규먼트 타입 -> 함수 구현부 }
1-4) 람다식 (4)
val result = hello(10, b) // 10 200
println(result)
// b 는 Int 를 argument로 받고, Int 를 반환하는 익명함수
fun hello(a:Int, b:(Int)->Int) : (Int) -> Int {
println(a)
println(b(20))
return b
}
b는 값을 10배하는 함수 함수를 인자로 받고, 함수를 반환할 수도 있다.
2) SAM ( Single Abastract Method, 단위 추상 메서드)
MainActivity.kt
가장 많이 사용할 함수 호출 중 하나는 View 에서 세돈클린리스너를 다는 것
자바 함수형 인터페이스 관계에서 나온 것 코틀린에서 함수형 인터페이스를 인자로 받는 것
자바 함수를 호출 할 때, 인터페이스 객체를 람다로 넘길 수 있음 함수형 인터페이스 : 추상 메소드가 오직 하나 뿐인 인터페이스
자바였다면?
val view = View(this)
view.setOnClickListener(){
new View.onClickListener(){
@Override
public void onClick(View: view) {
//
}
}
}
코틀린이면?
val view = View(this)
view.setOnClickListener( { println("안녕") })
또는
view.setOnClickListener { println("안녕") }
단 한 줄로 표현 가능.
함수형 인터페이스를 인자로 받는 자바함수를 람다식으로 대체할 수 있다.
'안드로이드 앱(Kotlin|Java) > [2025~] 안드로이드 앱' 카테고리의 다른 글
Part0_Ch02_03 Scope Function (0) | 2025.01.24 |
---|---|
Part0_Ch02_02 확장함수 (1) | 2025.01.24 |
Part0_Ch01_10 String Template (0) | 2025.01.24 |
Part0_Ch01_09 타입체크와 캐스팅 (0) | 2025.01.24 |
Part0_Ch01_08 Null (0) | 2025.01.24 |