반응형

이 게시물은 다음 링크를 참조하여 학습했습니다

 

Kotlin의 Scope functions(let, run, with, apply, also)에 대해서 알아보기

Scope functions는 let, run, with, apply, also를 말합니다. Scope functions는 객체에 접근하는 방법을 쉽게 해 줍니다. 이런 함수들을 이용하면 코드가 간결해지고, 가독성을 높여줄 수 있습니다. 위의 5개 함

codechacha.com

 

코틀린(Kotlin)의 Scope Function(let, with, run, apply, also) 정리

Scope Function 이라는 함수명에서 알 수 있듯이, 이 함수들을 람다식을 이용해서 호출하면 일시적인 Scope(범위)가 생기게 되고, 이 범위 안에서는 전달된 객체에 대해 "it" 또는 "this" 라는 Context Object

0391kjy.tistory.com

 

Scope functions | Kotlin

 

kotlinlang.org

 

1. Scope Functions?

Scope Function은 자바에는 없지만 코틀린에서 제공하는 기본 라이브러리 함수다.

Scope Function은 객체에 접근하는 방법을 쉽게 해준다.

이를 활용하면 코드를 간결하게 하고, 가독성을 높여줄 수 있다.

 

Scope Function에는 서로 다른 두가지 주요 차이점이 있다.

- Context Object를 참조하는 방법(this, it)

- return value

 

2. Context Object: this or it

Scope Funtion의 람다식 내에서 Context Object는 실제 객체명 대신 "it" 또는 "this"키워드로 접근하게 된다.

2-1. this

run, with, apply는 Context Object를 "this"로 참조한다.

 

2-2. it

let, also는 Context Object를 "it"으로 참조한다.

지정하지 않으면 기본적으로는 "it"으로 접근하고, 인자명을 지정해줄수 있다.

 

3. return value: Context Object or Lambda result 

3-1. Context Object

apply, also의 반환 값은 Context Object 객체 자체이다.

그렇기 때문에 체인 형식으로 계속적인 호출이 가능하다.

 

3-2. Lambda result

let, run, with는 람다식 결과를 반환한다.

결과에 대한 추가작업이 필요할 때 사용하거나, 반환 값을 무시하고 임시 범위로 사용할 수 있다.

 

4. Use Case

4-1. let

객체 결과값에 하나 이상의 함수 호출하는 경우 사용

nullable 객체에 대해 let을 사용하면, null이 아닌 객체일때만 실행이 가능하다 

 

4-2. with

이미 생성된 Context Object 객체를 인자로 받아서 사용

 

4-3. run

with와 비슷한 역할, 전달받는 위치가 다르다, let처럼 safe call(?.)을 붙혀서 null 체크 가능(더 자주 사용됨)

 

4-4. apply

객체 초기화시 가장 많이 사용

 

4-5. also

기존 객체를 수정하거나 변경하지 않고, 디벙깅을 위한 로깅등의 부가작업 하려할때 사용

 

5. 요약

Funtion Context Object Return Value
let it Lambda result
run this Lambda result
with this Lambda result
apply this Context Object
also it  Context Object
반응형

'Legacy' 카테고리의 다른 글

[Kotlin #6] 확장 함수(Extension Functions)  (0) 2022.05.23
[Kotlin #5] Inline Functions  (0) 2022.05.16
[Kotlin #3] Collections  (0) 2022.05.16
[Kotlin #2] 고급문법  (0) 2022.05.11
[Kotlin #1] 기본문법  (0) 2022.05.11

+ Recent posts