본문 바로가기

Kotlin

[Kotlin] Scope Function

https://pixabay.com

 

안녕하세요.

오늘은 Scope Function에 대해서 알아보도록 하겠습니다.


정리

오늘 다룰 Scope Function은 총 5가지로,

각 함수에 대해 간단하게 정리부터 하고 시작하겠습니다.

Scope Function 참조 방법 Return Type
let it Lambda Result
run this Lambda Result
with this Lambda Result
apply this Context Object
also it Context Object

let

권장 사용 시점

  • nullable 타입을 처리할 때
  • 임시 변수를 줄이고, 체이닝을 통해 코드의 가독성을 높일 때
  • 부수적인 작업을 수행한 후 객체를 반환하지 않을 때

장점

  • null 안정성을 간단하게 구현할 수 있다

Before

val input: String? = getInput()
if (input != null) {
	println(input.length)
}

 

After

val input: String? = getInput()
input?.let {
	println(it.length)
}

run

권장 사용 시점

  • 멤버 접근과 함수 호출을 함께 실행해야 할 때

장점

  • 객체의 멤버와 함수를 한 블록 안에서 간결하게 처리할 수 있다

Before

val config = getConfig()
if (config.isValid()) {
	initialize(config)
}

 

After

val config = getConfig().run {
    if (isValid()) {
    	initialize(this)
    }
}

with

권장 사용 시점

  • 객체에 여러 번 접근해야 할 때

장점

  • 객체에 여러 번 접근할 때 코드가 간결해지고 가독성이 좋아진다

Before

val builder = StringBuilder()
builder.append("Hello")
builder.append(", ")
builder.append("World!")

val result = builder.toString()

 

After

val result = with(StringBuilder()) {
    append("Hello")
    append(", ")
    append("World!")
    toString()
}

apply

권장 사용 시점

  • 객체를 초기화 하면서, 해당 객체를 반환해야 할 때

장점

  • 객체를 설정하는 과정을 간결하게 작성할 수 있다
  • property에 따른 여러 부 생성자를 만들지 않아도 된다

Before

val person = Person()
person.name = "Kang"
person.age = 20
person.address = "Gumi"

 

After

val person = Person().apply {
    name = "Kang"
    age = 20
    address = "Gumi"
}

also

권장 사용 시점

  • 부수적인 작업 (로그 출력, 디버깅 등) 을 수행할 때

장점

  • 객체의 값을 변경하지 않으면서도 부수적인 작업을 추가할 수 있다
  • 해당 객체를 반환하여 체이닝을 계속할 수 있다

Before

val numbers = mutableListOf(1, 2, 3)
println("Adding to 4 to the list")
numbers.add(4)

 

After

val numbers = mutableListOf(1, 2, 3).also {
    println("Adding to 4 to the list")
}.apply {
    add(4)
}

'Kotlin' 카테고리의 다른 글

[Kotlin] SAM & invoke  (1) 2024.10.30
[Kotlin] 함수형 프로그래밍  (2) 2024.10.29
[Kotlin] Sealed Class  (3) 2024.09.22
[Kotlin] Extension Function (확장 함수)  (0) 2024.09.10
[Kotlin] Null Safety  (0) 2024.07.29