반응형
수신 객체 지정 람다 : with 와 apply
kotlin 표준 라이브러리 with, apply
kotlin에만 있는 기능
수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것
- 이 람다를 수신객체 지정 람다 (lambda with receiver) 라고 부른다
🧵 with 함수
- 코틀린은 with 함수를 언어 구성요소가 아닌 라이브러리 함수를 통해 제공함 ?
fun alphabet(): String {
val stringBuilder = StringBuilder()
return with(stringBuilder){
for (letter in 'A'...'Z'){
this.append(letter)
}
append("\nNow I know the alphabet!")
this.toString()
}
}
- with
- parameter가 2개인 함수
- 위 식에서 첫 parameter은 stringBuilder, 두번째는 람다함수
- with(stringBuilder, {}) 이렇게 쓴것과 같은데 람다는 뒤로 뺄 수 있다
- this.append
- this를 사용해서 수신객체에 접근
- this나 . 사용하지 않고 property, method 이름만 사용해도 수신객체의 멤버에 접근할 수 있다
fun alphabet() = with(StringBuilder()){
~~
}
- 식을 본문으로 하는 함수로 표현하면 더 간단해 진다
- 메소드 이름 충돌
- 위 함수를 OuterClass 의 메소드로 구현했다고 하자
- OuterClass에도 .toString() 함수가 있는 경우
- 이걸 사용하기 위해서는 레이블을 붙인다
- this@OuterClass.toString()
🧶 apply 함수
- apply는 항상 자신에게 전달된 객체 (수신객체)를 반환한다
fun alphabet() = StringBuilder().apply{
for (letter in 'A'..'Z'){
append(letter)
}
append("\nNow I know the Alphabet!")
}.toString()
- 위 예제에서 apply를 실행한 결과는 StringBuilder 객체
- 객체의 인스턴스를 만들면서 즉시 property 일부를 초기화 할때 유용
- 수신 객체 지정 람다 함수의 예 : with, apply
- buildString 함수와 같은 구체적인 람다함수도 있다
- 수신 객체는 항상 String builder
- buildString 함수와 같은 구체적인 람다함수도 있다
반응형
'Languages' 카테고리의 다른 글
kotlin의 원시타입 (int, boolean, any) (0) | 2020.05.07 |
---|---|
kotlin의 null 가능성 (?. ?: !!) (0) | 2020.05.07 |
java 함수에 kotlin lambda 식 메소드로 전달하기 (자바 함수형 인터페이스) (0) | 2020.04.26 |
kotlin의 lazy evaluation (sequence, map, filter) (0) | 2020.04.26 |
kotlin의 collection 관련 함수 (filter, map, groupby ,flatMap, 술어함수) (0) | 2020.04.26 |