반응형
🔎람다 표현식(Lambda expression)
- 람다식, 람다 표현식, 람다라고 불린다.
- 마치 value처럼 다룰 수 있는 익명함수 (이름이 없는 함수)
- return값으로 사용할 수 있다.
- 기본 형태
1
|
val lamdaName : Type = {argumentList -> codeBody}
|
cs |
- 람다 함수는 항상 { }으로 감싸서 표현해야 한다.
- { }안에 -> 표시가 있다. (-> 왼쪽 : 매개변수, 오른쪽 : 함수 내용)
- 마지막 줄이 return값이다.
- 매개변수 타입을 선언해야 한다, 타입을 추론할 수 있을 때에는 생략 가능하다.(중요)
🔎람다 확장 함수
- 기존에 정의된 클래스에 함수를 추가하는 기능
- 자신이 만든 클래스에 새로운 함수가 필요할 때 쉽게 추가할 수 있다.
- 기본 형태
1
2
3
4
5
6
7
8
|
fun 확장하려는대상.함수명(매개변수):Unit {
}
fun 확장하려는대상.함수명(매개변수):리턴타입 {
return 값
}
|
cs |
- 확장함수 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//3.확장함수
val pizzaIsGreat : String.() -> String={
this + "Pizza is the best!"
}
fun exetendString(name : String , age : Int) : String{
//확장함수 파라미터 //int
val introduceMyself : String.(Int) -> String = {"I am ${this} and ${it} years old"}
return name.introduceMyself(age)
}
fun main(){
println(square(12))
println(nameAge("joyce",99)) //★타입 추론 가능하다 중요★
val a = "jungah said"
val b = "mac said"
println(a.pizzaIsGreat())
println(b.pizzaIsGreat())
}
|
cs |
🔎람다에서의 return
- 맨 마지막에 있는 식이 return값이 된다.
- 일반적으로 람다식 내부에서는 return을 사용할 수 없다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//4.람다의 return
val calculateGrade : (Int)->String = {
when(it){
in 0..40->"fail"
in 41..70->"pass"
in 71..100->"perpect"
else->"Error"
}
}
fun main(){
println(calculateGrade(97))
}
|
cs |
🔎함수를 직접 다른 함수로 전달하기
- 자바에서는 일련의 동작을 변수에 저장하거나 다른 함수에 넘길 때 복잡했다.
- 람다식은 함수를 값(value처럼 다루는 접근 방식을 택함으로써 간단하게 해결할 수 있다.
- 기존처럼 클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘기는 대신
- 함수를 직접 다른 함수에 전달할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//5.람다를 표현하는 여러 가지 방법
fun invokeLamda(lamda : (Double)->Boolean) : Boolean{
return lamda(5.2343)
}
fun main(){
val lamda : (Double)->Boolean = {number : Double->
number == 4.3213
}
println(invokeLamda(lamda))
println(invokeLamda ({ it>3.22 }))
}
|
cs |
- 버튼 클릭 OnClickListener 도 훨씬 간결한 코드로 구현 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
|
/* 자바에서의 일반적인 클릭 리스너 구현 */
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
}
});
/* 람다로 클릭 리스너 구현 */
button.setOnClickListener {
//TODO
|
cs |
반응형
'💻 my code archive > 🎈Kotlin' 카테고리의 다른 글
Kotlin 공부 기록(6) - 심리테스트 앱 만들기 (Fragment, Navigation 사용) (0) | 2022.02.06 |
---|---|
Kotlin 공부 기록(5) - 안드로이드 레이아웃(layout) 종류 (0) | 2022.02.06 |
Kotlin 공부 기록(4) - 데이터 클래스, companion object, object 싱글톤 패턴 (0) | 2022.02.01 |
Kotlin 공부 기록(2) - 클래스, 생성자, 상속 (0) | 2022.01.27 |
Kotlin 공부 기록(1) - 기본 문법 정리, 함수, 조건식, val과 var, 코틀린 null 체크 (0) | 2022.01.26 |