📝 학습목표 : 람다식의 기본 구조와 활용 예시를 살펴보자.
람다식이란?
람다식은 코틀린에서 함수를 값처럼 다룰 수 있는 익명함수이다. 메소드의 파라미터로 넘겨주거나 리턴값으로 사용할 수 있다.
* 익명함수: 함수처럼 동작하는 이름이 없는 함수
람다식의 기본 구조
람다식은 val lamdaName : Type = { argumentList -> codeBody } 구조이며 항상 마지막 코드가 리턴값이다.
예를 들어,
정수를 입력받아 제곱을 반환하는 함수를 람다식으로 표현해보자
아래 코드는 input Int를 output Int로 return한다. (Int) -> (Int)이기 때문에 namber가 Int라는 타입추론이 가능하다.
(Int) -> (Int)를 생략하고 number에 타입을 지정하여 선언해줄 수도 있다.
람다식의 활용
1. 함수의 인자로 전달하기
람다식은 함수의 인자로 전달될 수 있다.
maxBy는 두 정수를 입력받아 최댓값을 찾는 함수이며 인자로 (Int, Int) -> Int 형태의 람다식을 받는다.
2. 리턴값으로 사용하기
람다식은 함수의 리턴값으로 활용할 수도 있다.
nameAge 변수에 이름과 나이를 입력받아 문자열을 반환하는 함수를 람다식으로 정의할 수 있다.
다른 예시로 성적 등급을 반환하는 함수를 람다식으로 정의해보자.
람다식은 항상 마지막 표현식이 리턴값을 의미하며 리턴의 value 타입을 지정한다고 했다.
calculateGrade 함수는 input이 Int이고 output이 String이다. 정수를 입력하면 문자열로 리턴하는데, 만약 it이 120이라면?
when문에서는 120에 해당하는 메시지가 없기 때문에 반드시 else를 함께 정의해준다.
Int는 여러 개가 있을 수 있으니 항상 소괄호 안에 작성해준다.
3. 확장 함수(Extension Function)
확장 함수를 사용하여 기존 클래스에 새로운 기능을 추가할 수 있다.
this는 해당 클래스의 인스턴스로 확장 함수가 호출된 문자열을 가리킨다.
this 위치에 따라 새로운 기능이 추가된다.
확장함수를 콜하는 오브젝트를 가르키는 this와,
타입이 1개 들어가는 단일 파라미터를 it으로 생략한 함수이다. 2번째줄 String.(Int) 처럼
it은 별도의 파라미터명을 정의하지 않았을 때 사용할 수 있기 때문에 만약 여러 개의 파라미터가 있다면 파라미터들을 정의해줘야 한다.
람다의 표현 방식
람다 리터럴(Lambda Literal)
람다 리터럴은 중괄호로 output을 내는 방법이다. 중괄호 안에 파라미터와 해당하는 코드를 정의하는 형태로 사용된다.
println을 하면 2가지 방식을 알려준다.
1️⃣ 이미 선언된 람다식 변수를 리턴한다. (일반적인 방식)
2️⃣ 중괄호를 사용하여 리턴한다. (람다 리터럴)
아래는 Double로 받아 Boolean을 리턴하는 람다식을 파라미터로 받는 코드이다. 람다에 5.4321을 넣어 리턴되는 Boolean값을 invokeLamda 함수에 담았다.
*Double: 실수를 나타내는 타입이다.
람다 리터럴을 활용하여 함수를 직관적으로 표현하여 output을 가독성있게 리턴할 수 있다.
💡 마치며
코틀린에서 람다식을 사용하여 코드를 간결하게 작성하고 함수를 값으로 다룰 수 있기 때문에 람다식은 굉장히 중요한 개념 중 하나라고 한다. 람다식을 자유롭게 활용할 수 있도록 명확히 이해하고 익숙해져야겠다고 생각한다.
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 동반 객체(Companion Object) (0) | 2024.03.12 |
---|---|
[Kotlin] 데이터 클래스(Data Class) (0) | 2024.03.11 |
[Kotlin] Class 사용법(+오버라이딩) (0) | 2024.03.07 |
[Kotlin] Nullable & NonNull (0) | 2024.03.04 |
[Kotlin] 반복문 for & while (0) | 2024.03.02 |