728x90
본 문서는 안드로이드 개발자 가이드 를 토대로 작성되었습니다.
함수
3. 람다함수 (Lambda Functions)
람다식 또는 람다함수는 함수의 간결함을 목적으로 한다. 기존 함수를 정의할 때 사용했던 fun 예약어나 함수이름을 명시하지 않고 축약해 선언한다.
// 기존 함수 선언
fun 함수이름 (매개변수) { ... }
// 람다함수 선언
{매개변수 -> ...}
람다함수는 -> 키워드를 기준으로 왼쪽은 매개변수, 오른쪽에는 함수의 내용을 명시한다. 매개변수로 타입을 선언해야 하지면 생략할 수 있다.
val stringLengthFunc = { num1: Int, num2: Int -> // Int는 생략 가능!
num1 + num2
}
코드의 중복을 막고 여러번 반복해서 사용하기 위한 방법이 기존 함수였다면, 람다는 간편하게 사용할 수 있는 일회용 함수라고 생각하면 된다. 그렇기에 람다함수는 아래 예제와 같이 어디서나 호출이 가능하다.
printIn("result : ${{ num1: Int, num2: Int ->
num1 + num2
}(2, 3)}")
// 어디서나 호출 가능하다.
// result : 5
람다식은 변수의 타입으로도 선언될 수 있다. 일반적인 변수 선언식은 아래와 같다.
val stringLengthFunc : Int = 10 // Int 타입의 변수
람다식이 하나의 타입(함수타입) 으로써 Int를 대신해 변수를 설명해준다.
// stringLengthFunc 는 String 을 매개변수로 받고 Int를 반환하는 함수타입이며,
// {}의 내용을 대입받는다.
val stringLengthFunc: (String) -> Int = { input ->
input.length
}
위 람다식의 결과를 가져오려면 이름이 있는 함수처럼 호출해야 한다.
val stringLengthFunc: (String) -> Int = { input ->
input.length
}
val stringLength: Int = stringLengthFunc("Android")
함수 타입을 여러번 정의해야 할 때 typealias 키워드를 사용하면 중복을 방지할 수 있다.
typealias mType = (String) -> Int
val stringLengthFunc1: mType = { input -> input.length }
val stringLengthFunc2: mType = { input -> input.length }
4. 익명함수 (Anonymous Function)
람다식은 리턴 타입을 자동으로 유추할 수 있기 때문에 리턴 타입을 지정해야 할 필요가 없다. 만약 리턴 타입을 지정해야 한다면 익명함수를 사용한다. 익명함수는 기본함수와 거의 동일하지만 함수명이 없다.
// 익명함수를 사용하는 두 가지 예
val anonymousFunction = fun (x: Int, y: Int): Int = x + y
val anonymousFunction = fun (x: Int, y: Int): Int {
return x + y
}
val result: Int = anonymousFunction(2, 3)
람다식은 return문을 사용할 수 없기에 조건문을 통해 처리를 종료하고 싶은 경우 사용하기 애매하다.
val stringLengthFunc: (String) -> Int = { input ->
if (input.length > 5) {
return input.length // error 발생
}
}
이 때 익명함수를 사용하는 것이 좋다.
val stringLengthFunc = fun(input: String): Int {
if (input.length > 5) {
return input.length
}
}
728x90
반응형
'Android > Kotlin' 카테고리의 다른 글
Kotlin :: 문자열 안에 표현식 값 넣기 (0) | 2020.10.15 |
---|---|
Kotlin :: 프로그래밍 언어 배우기 (고차함수) (0) | 2020.10.12 |
Kotlin :: 프로그래밍 언어 배우기 (기본함수) (0) | 2020.10.05 |
Kotlin :: 프로그래밍 언어 배우기 (조건문) (0) | 2020.10.01 |
Kotlin :: 프로그래밍 언어 배우기 (변수 선언) (0) | 2020.09.30 |
댓글