Language/Kotlin

[Kotlin] 스코프함수 (Scope Function)

by Donghwan 2020. 9. 8.

코틀린 표준 라이브러리는 객체의 컨텍스트 내에서 코드 블럭을 실행하기 위한 목적만을 가진 함수를 제공합니다. 이런 함수들은 람다식으로 호출할 때, 임시로 범위를 형성합니다. 이 범위 내에서는 객체의 이름이 없어도 객체에 접근할 수 있습니다. 이러한 함수를 스코프 함수라고 하고 스코프 함수는 새로는 기능을 제공하는 것이 아니라 코드의 가독성을 향상 시키는 역할을 합니다. 스코프 함수는 apply, run, with, also, let이 있고 이 함수들은 임시로 생성된 객체의 코드블럭을 실행합니다. 함수는 객체의 컨텍스트를 참조하는 방식, 리턴값으로 사용여부를 판단합니다.

 

컨텍스트 객체(Context Object)

  • 스코프 함수의 람다식 내에서 컴텍스트 객체는 참조 이름으로 사용할 수 있습니다.
  • 람다 수신자(this) 또는 람다 인자(it)을 사용합니다.
  • 둘다 동일한 역할을 하는데 상황별 각각의 장점과 단점이 존재합니다.

 

람다 수신자 (this)

  • apply, run, with는 람다 수신자 this를 사용하여 컨텍스트 객체를 참조합니다.
  • this를 생략할 수도 있으나 this를 생략할 경우 외부의 객체 혹은 함수를 구분하기 어려울 수 있습니다.
  • 주로 객체의 함수를 호출하거나 프로퍼티를 할당하는 것과 같이 객체 멤버를 처리하는 람다에 사용하는 것을 권장합니다.

 

람다 인자 (it)

  • let, also는 컨텍스트 객체를 람다 인자로 가집니다.
  • 만약 인자의 이름이 정해지지 않았다면, 해당 객체는 암묵적으로 it으로 접근할 수 있습니다.
  • 객체가 함수 호출에서 주로 인자로 사용될 때에는 컨텍스트 객체를 it으로 가지는 것이 더 낫습니다.
  • 또한 코드 내에서 여러개의 변수를 사용한다면 it을 사용하는 것이 낫습니다.

 

리턴값

  • apply, also는 컨텍스트 객체를 리턴합니다.
  • run, with, let은 람다식의 결과를 리턴합니다.
728x90
반응형

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 일급함수(First-class citizen)  (0) 2020.09.16
[Kotlin] 열거형 클래스 (Enum Class)  (0) 2020.09.08

댓글