목차
반응형
람다 식 - Lambda Expression
> 다른 함수에 넘길 수 있는 작은 코드 조각
공통 코드 구조를 함수로 뽑아낼 수 있다.
람다식을 사용하면 코드가 더욱 간결해진다.
맛보기
자바 코드
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view){
//수행동작
}
})
자바의 경우 무명 내부 클래스를 선언하고 동작을 적어 줄 수 있다. 이는 코드를 번잡스럽게 만들며, 규모가 커지는 경우 가독성을 현저히 저하시킨다.
Kotlin
button.setOnClickListener{ /*수행동작*/ }
하지만 람다식을 활용하면 보다 간결한 표현으로 기능을 구현할 수 있다.
람다 식의 문법
위와 같이 람다 식은 항상 중괄호로 둘러 싸여 있다.
화살표 (->)가 파라미터와 본문을 구분해준다.
또한 람다식에 대한 특징은 다음과 같다
- 컴파일러가 문맥으로부터 유추할 수 있는 인자 타입을 굳이 적을 필요는 없다.
- 인자가 단 하나뿐인 경우 굳이 인자에 이름을 붙이지 않아도 된다.
- 함수 호출 시 맨 뒤에 있는 인자가 람다 식이라면 그 람다를 괄호 밖으로 뺄 수 있다.
people.maxBy({p : Person -> p.age})
우선 위 식은 인자 타입을 컴파일러가 유추할 수 있으므로 타입 생략이 가능하다 따라서 아래와 같이 사용할 수 있다.
people.maxBy({p -> p.age})
또한 인자가 단 하나뿐인 경우에 해당하므로 굳이 인자에 이름을 붙이지 않아도 된다.
people.maxBy({it.age})
여기서 it은 람다의 파라미터 이름을 가르킨다. (it은 람다의 파라미터가 하나뿐이고, 컴파일러가 추론할 수 있는 경우 사용한다) 또한 함수 호출시 맨 뒤 인자가 람다식이기 때문에 그 람다를 괄호 밖으로 뺄 수 있다.
people.maxBy(){it.age}
함수 호출 시 인자가 여러 개가 아닌 람다식 하나만 있다면 ()를 생략 가능하다
people.maxBy{it.age}
멤버 참조
인자로 넘기려는 코드가 이미 함수로 선언된 경우 어떻게 해야 할까?
그 함수를 호출하는 람다를 만들어도 되나 이는 중복이다..!!
함수를 직접 넘겨보자
val getAge = Person::age
::을 사용하여 멤버를 참조한다.
::은 프로퍼티나 메소드를 단 하나만 호출하는 함수 값을 만들어준다.
::은 클래스 이름과 참조하는 멤버(프로퍼티나 메소드)이름 사이에 위치한다.
멤버 참조는 그 멤버를 호출하는 람다와 같은 타입이다. 다음 예처럼 그 둘을 자유롭게 바꿔 쓸 수 있다.
people.maxBy(Person::age)
people.maxBy{p->p.age}
people.maxBy{it.age}
반응형
'Develop > Android' 카테고리의 다른 글
Android Custom Dialog 만들기 - Dialog Fragment (0) | 2021.05.30 |
---|---|
Android ViewBinding에 대하여 (0) | 2021.05.30 |
firebase 이용하여 facebook 로그인 연동하기 - android kotlin (0) | 2020.09.24 |
Firebase 이용하여 Google Login 구현하기 _ Android Kotlin (0) | 2020.09.23 |
안드로이드 스튜디오 플러그인 활용으로 개발 시간 줄여보기 (0) | 2020.09.21 |