1. Scope Function 정의
- 특정 객체(Context Object)에 대하여, 람다를 사용해 임시 영역을 만듦으로써 코드 간결화, 메서드 체이닝 등으로 함수형 프로그래밍을 더욱 효과적으로 할 수 있게 도와준다.
- 이 영역에선 이름없이 객체에 접근할 수도 있다.
- 이런 함수를 Scope function이라 하는 것이며, 대표적으로 let, run, apply, also 등이 있다.
=> 공식 문서를 살펴보면 위와 같이 정의하고 있으나 곧장 와닿지 않을 수 있다. 직접 함수의 선언부를 살펴보며 분석해보고자 한다.
2. Scope Function 구조 및 사용목적
(1) 구조
public inline fun <T, R> T.let(block: (T) -> R): R
public inline fun <T> T.apply(block: T.() -> Unit): T
- Scope functions 중 let과 apply의 선언부이다.
- 임의의 객체(T)의 확장함수로 선언되어 있음을 알 수 있다.
- 다른 함수를 매개변수로 활용하는 고차함수의 형태임을 알 수 있다.
- apply처럼 자기 자신(T)을 반환하기도 하고, let처럼 람다식의 결과(R)를 반환하기도 한다.
(2) 사용 목적
- 코드를 보다 간결하고 읽기 쉽게 만들 수 있다.
- 특정 객체에 어떤 함수를 적용하는지 알기 쉽고, 해당 함수를 적용하는 코드가 어디에서 시작해서 어디에서 끝나는지 알 수 있다.
=> 이를 확인할 구체적인 예시는, 아래에서 각각의 Scope function을 나열하며 살펴보겠다.