728x90
오늘은 함수형 프로그래밍의 꽃인 람다식에 대해 정리해보고자 합니다. 람다식은 무궁무진하기 때문에 이 글이 완전하지 않음을 미리 알려드립니다. 더 추가하면 좋을 내용은 댓글로 알려주시면 감사하겠습니다!!
람다식은 기본적으로 value인 것처럼 다룰 수 있는 익명함수입니다.
- 사용방법
- 메소드의 파라미터 역할
- 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 발생
}
}
> 익명내부함수
익명내부함수를 람다식으로 이용할 수 있는데 조건이 있습니다.
- Kotlin interface가 아닌 자바 interface여야 한다.
- 그 interface는 딱 하나의 메소드만 가져야 한다.
Ex>
button.setOnclickListener{ object: View.OnClickListener{
override fun Onclik(p0: View?){
// TODO
}
} }
//익명내부함수
button.setConclickListener{
// TODO
}
지금까지 람다식에 대해 알아보았는데 공부하면서 정말 많은 곳에 쓰일 수 있고 프로그래밍을 간편하게 만들어주는 기능이라고 생각이 들었습니다.
더 공부하면서 람다식에 대해 정리할 수 있는 것이 있다면 추가해보도록 하겠습니다. 감사합니다.
728x90
'Android(Kotlin)' 카테고리의 다른 글
[Kotlin Android] 정적 변수와 메소드 :: Companion Object (0) | 2022.05.30 |
---|---|
[Kotlin Android] Array, ArrayList, List, MutableList (0) | 2022.05.28 |
[Kotlin Android] 클래스 (0) | 2022.05.26 |
[Kotlin Android] 조건문과 반복문 (0) | 2022.05.24 |
[Kotlin Android] 변수와 함수 (0) | 2022.05.23 |