스코핑(scoping) 함수스코핑 함수의 3가지 속성1. 일반 함수인가? 확장 함수인가? 2. 아규먼트가 this 인가? it 인가?3. 반환 타입이 this인가? 다른 타입이 될 수 있는가?스코핑 함수 속성 정리
-
[매일읽기] Mastering Kotlin standard functions: run, with, let, also and apply개발자 라이프/매일읽기 2020. 7. 27. 09:57반응형
Mastering Kotlin standard functions: run, with, let, also and apply
Some of the Kotlin’s standard functions are so similar that we are not sure which to use. Here I will introduce a simple way to clearly…
medium.com
코틀린 strandard 함수 중 run, with, let, also, apply를 비교해본다.
스코핑(scoping) 함수
- 본문의 필자는 위 5가지 함수를 스코핑 함수라 정의 함
- 스코핑 함수는 말 그대로 스코프를 나누고, 무언가를 반환할 수 있도록 함
- 코틀린에서는 주로 스코프 마지막 라인의 객체를 반환
스코핑 함수의 3가지 속성
스코핑 함수는 3가지 속성에 따라 구분할 수 있음
1. 일반 함수인가? 확장 함수인가?
: with() vs T.run
- 파라미터 객체에 대한 처리(null 검증 등)에서 달라질 수 있음
- 확장 함수는 함수 체이닝에 적합함
2. 아규먼트가 this 인가? it 인가?
: T.run vs T.let
- this 아규먼트는 함수 파라미터에 객체 자신을 대입 (T.run)
- it 아규먼트는 객체 자신이 람다 아규먼트가 됨 (T.let)
- 스코핑 함수 내부에서 this 키워드는 생략되기 때문에 it 아규먼트가 보다 명시적임
- it 아규먼트는 람다 아규먼트이기 때문에 필요에 따라 아규먼트 이름을 변경할 수 있음
3. 반환 타입이 this인가? 다른 타입이 될 수 있는가?
: T.let vs T.also
- 스코핑 함수를 이용한 함수 체이닝에서 뚜렷한 차이가 발생
- 스스로를 반환하는 경우, 함수 체이닝이 되더라도 기존 객체가 그대로 반환됨 (T.also)
- 다른 타입으로 반환하는 경우, 체이닝된 함수 내부의 결과 값이 반환됨 (T.let)
스코핑 함수 속성 정리
속성 with run let also apply 확장 함수인가? X O O O O this를 아규먼트로 전달하는가? O O X X O 객체 스스로(this)를 반환하는가? X X X O O 반응형