멜팅비의 개발 공부

[Kotlin] 코틀린 let, apply, run, with 함수 간단 정리 본문

개발 공부/[Android 개발]

[Kotlin] 코틀린 let, apply, run, with 함수 간단 정리

멜팅비 2021. 2. 20. 18:06
반응형

코틀린에서 제공하는 함수 정리

코딩하면서 자주 사용하는 코틀린 함수들에 대한 내용을 정리하기 위해 포스팅하게 되었다.


let()

inline fun <T, R> T.let(block: (T) -> R): R

let 함수를 호출하는 객체를 블록의 인자로 넘기고, 블록의 결과 값을 반환한다.

if (value != null) 과 같은 null check를 대신할 수 있다.

 

-> null check 후 코드를 실행하고 싶거나, 블록 내의 결과물을 반환하고 싶은 경우 주로 사용

val str: String? = "Hello, World"  

// 기존 방식
if (str != null) {
	println(str)
}

// let을 사용한 경우
str?.let {
    println(str)       
}

실행결과 : Hello, World

 

apply()

 

fun <T> T.apply(block: T.() -> Unit): T

apply() 함수는 함수를 호출한 객체를 이어지는 함수 블록의 리시버로 전달한다.

 

-> 특정 객체를 생성하면서 함께 호출해야 하는 초기화 코드가 있는 경우 사용

 

// apply()함수를 사용하지 않고 초기화를 하는 경우
val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
param.gravity = Gravity.CENTER_HORIZONTAL
param.weight = 1f
param.topMargin = 100
param.bottomMargin = 100

위 코드를 apply() 함수를 사용하게 되면

val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
    gravity = Gravity.CENTER_HORIZONTAL
    weight = 1f
    topMargin = 100
    bottomMargin = 100
}

 

 

run()

run() 함수는 인자가 없는 익명 함수처럼 사용하는 형태와 객체에서 호출하는 형태를 제공

fun <T> T.apply(block: T.() -> Unit): T   > 인자가 없는 익명 함수 형태

-> 이어지는 블록 내에서 처리할 작업들을 넣어줄 수 있고, 값을 반환하지 않거나 특정 값을 반환할 수 있다.

 

fun <R> run(block: () -> R): R  > 객체에서 호출하는 형태

-> 객체에서 이 함수를 호출하는 경우 객체를 리시버로 전달받으므로, 특정 객체의 메서드나 필드를 연속적으로 호출할거나 값을 할당할 때 사용

 

* apply 함수와 유사하지만,

apply 함수는 객체를 생성함과 동시에 연속된 작업을 수행할 때 사용

run 함수는 이미 생성된 객체의 메서드나 필드를 연속적으로 호출할 때 사용

 

recyclerView?.run {
	layoutManager = LinearLayoutManager(this)
    adapter = viewAdapter
}

null safety 검사 가능

 

 

with()

fun <T, R> with(receiver: T, block: T.() -> R): R

with() 함수는 인자로 받는 객체를 이어지는 블록의 리시버로 전달하며, 블록의 결과값을 반환한다.

 

run() 함수와 기능은 동일하나, 리시버로 전달할 객체가 어디에 위치하는지가 다름

with(recyclerView) {
	layoutManager = LinearLayoutManager(this)
    adpater = viewAdapter
}

 

반응형
Comments