관리 메뉴

피터의 개발이야기

[Kotlin] Scope Functions (let, with, run, apply, also) 정리 본문

Programming/Kotlin

[Kotlin] Scope Functions (let, with, run, apply, also) 정리

기록하는 백앤드개발자 2024. 6. 25. 10:10
반응형

 

ㅁ 들어가며

ㅇ이번 글은 Kotlin의 5가지 주요 Scope Functions (let, with, run, apply, also)에 대해 정리하였다.

kotlin doc - scope function의 내용을 보고 정리하였다.

 

ㅁ  Scope Functions (let, with, run, apply, also) 요약

let: 객체를 인자로 받아 처리하며, 결과를 반환합니다. Null 체크에 유용하다.

with: 객체를 직접 입력받아 속성을 변경할 수 있으며, 여러 함수를 그룹화하는 데 사용된다.

run: 객체의 확장 함수로, 계산이 필요하거나 지역 변수 범위를 제한할 때 사용한다.

apply: 객체를 초기화하거나 변경할 때 주로 사용되며, 자기 자신을 반환한다.

also: 객체의 속성을 변경하지 않고 부가적인 작업(로깅, 유효성 검사 등)을 수행할 때 적합하다.

 

ㅁ Kotlin의 Scope Functions란

ㅇ Kotlin의 Scope Functions는 객체의 컨텍스트 내에서 코드 블록을 실행하는 데 사용된다.

ㅇ 이 함수들은 코드를 더 간결하고 읽기 쉽게 만들어준다.

 

# let, also, run은 scope function이다.

이들 함수는 [Kotlin] 널 안정성, Null safety에서도 정리하였다.

 

ㅁlet

컨텍스트 객체: `it`으로 참조
반환 값: 람다 결과
용도: null이 아닌 객체에 대해 작업을 수행하거나, 지역 변수를 제한된 범위 내에서 선언할 때 사용

val name = person?.let { it.name } ?: "Default Name"

 

ㅁ run

컨텍스트 객체: `this`로 참조
반환 값: 람다 결과
용도: 객체 구성 및 결과 계산, 여러 지역 변수의 범위를 제한할 때 사용

val ageNextYear = person.run { age + 1 }

 

ㅁ with

컨텍스트 객체: `this`로 참조
반환 값: 람다 결과
용도: 객체의 여러 함수를 호출할 때 그룹화

with(person) {
    println(name)
    println(age)
}

 

ㅁ apply

텍스트 객체: `this`로 참조

반환 값: 컨텍스트 객체
용도: 객체 초기화 및 구성

val person = Person().apply {
    name = "James"
    age = 56
}

 

ㅁalso

컨텍스트 객체: `it`으로 참조
반환 값: 컨텍스트 객체
용도: 부가적인 작업(로깅, 유효성 검사 등)을 수행할 때 사용

val numbers = mutableListOf("one", "two", "three").also {
    println("Before adding: $it")
}.add("four")

 

ㅁ Scope function 간결한 사용법

ㅇ Scope function을 지나치게 반복하면 가독성이 떨어지고 예측 값을 파악하기 어렵다.

val result = Person.withDefaultName()
    .apply { name = "페트리카" }
    .run { name.length }
    .also { println("이름의 길이는? $it") }
    .let { name -> name + 1 }

 

ㅇ 이런 문제를 해결하기 위해 객체에 적당한 책임을 할당해도 좋다.

val person = Person.withDefaultName()
person.updateName("페트리카")
val result = person.getNameLength() + 1

 

https://hyeon9mak.github.io/using-kotlin-scope-function-correctly/#-%EC%A0%95%EB%A6%AC

ㅇ 이 함수들의 목적은 코드를 더 간결하게 만드는 것이지만, 과도한 사용은 오히려 가독성을 떨어뜨릴 수 있다.

ㅇ 따라서 각 함수의 특성을 이해하고 상황에 맞게 적절히 사용하는 것이 중요하다.

 

참조: Kotlin Scope function 올바르게 사용하기

 

ㅁ 마무리

Scope Functions는 코드의 가독성을 높이지만, 과도한 사용은 오히려 가독성을 떨어뜨릴 수 있으므로 적절히 사용하는 것이 중요하다.

ㅁ 함께 보면 좋은 사이트

ㅇ 코틀린으로 배우는 함수형 프로그래밍 - 2.10 코틀린 표준 라이브러리 44p

kotlin doc - scope function

Kotlin Scope function 올바르게 사용하기

 

반응형
Comments