<aside> 📑 참고자료 : KOTLIN IN ACTION

</aside>

람다lambda expression 또는 람다는 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각

5.1 람다 식과 멤버 참조


람다 : 코드 블록을 함수 인자로 넘기기

"이벤트가 발생하면 이 핸들러를 실행하자" 나 "데이터 구조의 모든 원소에 이 연산을 적용하자"와 같은 생각을 코드로 표현하기 위해 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 한다.

⇒ Java : 무명 클래스 (클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘긴다.)

Kotlin : 함수형 프로그램을 기반으로 함수를 값처럼 다룰 수 있어 함수를 다른 함수에 넘긴다.

//Java
button.setOnClickListener(new OnClickListener(){
	@override
	public void onClick(View view){
		// 클릭시 수행할 동작
	}

});
button.setOnClickListener{
	// 클릭시 수행할 동작
}

코드 중복 제거 비슷한 작업을 많이 사용해야 하는 경우, 불필요한 코드를 제거할 수 있다!!

람다와 컬렉션

컬렉션을 다룰 때 수행하는 대부분의 작업들은 몇가지 일반적인 패턴에 속하며, 따라서 그런 패턴은 라이브러리에 있어야 한다. 람다는 컬렉션을 편리하게 처리할 수 있도록 도와준다. 코드 중복 제거

data class Person(val name: String, val age: Int)

예제) 사람들로 이뤄진 리스트가 있고 그 중에 가장 연장자를 찾고 싶다.

  1. 람다를 사용하지 않는다면, 루프를 통해 직접 검색을 구현,

    ⇒ 나의의 최댓값과 그 최댓값에 해당하는 나이를 먹은 첫 번째 인물을 저장하기 위해 변수를 두개 만들고, 리스트에 대해 이터레이션하면서 그 두 변수를 갱신할 것이다.

    (설명으로 코드를 대체하도록 하겠다,,, 다들 알듯이 상당히 길다 ^^,,)

  2. 람다를 사용해 컬렉션 검색하기

    val people = listOf(Person("Alice",29),Person("Bob",31))
    println(people.maxBy{it.age})
    >>>Person(name=Bob,age=31)
    
    people.maxBy(Person::age)
     //**코드 중복 제거**로 한다면 코드는 더 짧고 더 이해하기 쉽다!