<aside> 📑 참고자료 : KOTLIN IN ACTION
</aside>
람다lambda expression 또는 람다는 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각
람다를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다.
코틀린 표준 라이브러리는 람다를 아주 많이 사용한다.
→ ex) 컬렉션 처리하는 패턴을 표준 라이브러리 함수에 람다를 넘기는 방식,,
자바 라이브러리와 람다를 함께 사용가능!
"이벤트가 발생하면 이 핸들러를 실행하자" 나 "데이터 구조의 모든 원소에 이 연산을 적용하자"와 같은 생각을 코드로 표현하기 위해 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 한다.
⇒ Java : 무명 클래스 (클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘긴다.)
Kotlin : 함수형 프로그램을 기반으로 함수를 값처럼 다룰 수 있어 함수를 다른 함수에 넘긴다.
//Java
button.setOnClickListener(new OnClickListener(){
@override
public void onClick(View view){
// 클릭시 수행할 동작
}
});
button.setOnClickListener{
// 클릭시 수행할 동작
}
⇒ 코드 중복 제거 비슷한 작업을 많이 사용해야 하는 경우, 불필요한 코드를 제거할 수 있다!!
컬렉션을 다룰 때 수행하는 대부분의 작업들은 몇가지 일반적인 패턴에 속하며, 따라서 그런 패턴은 라이브러리에 있어야 한다. 람다는 컬렉션을 편리하게 처리할 수 있도록 도와준다. 코드 중복 제거
data class Person(val name: String, val age: Int)
예제) 사람들로 이뤄진 리스트가 있고 그 중에 가장 연장자를 찾고 싶다.
람다를 사용하지 않는다면, 루프를 통해 직접 검색을 구현,
⇒ 나의의 최댓값과 그 최댓값에 해당하는 나이를 먹은 첫 번째 인물을 저장하기 위해 변수를 두개 만들고, 리스트에 대해 이터레이션하면서 그 두 변수를 갱신할 것이다.
(설명으로 코드를 대체하도록 하겠다,,, 다들 알듯이 상당히 길다 ^^,,)
람다를 사용해 컬렉션 검색하기
val people = listOf(Person("Alice",29),Person("Bob",31))
println(people.maxBy{it.age})
>>>Person(name=Bob,age=31)
people.maxBy(Person::age)
//**코드 중복 제거**로 한다면 코드는 더 짧고 더 이해하기 쉽다!