Scope Function

creativeBin·2022년 12월 26일
0

Scope Function

매번 헷갈리는 Kotlin Scope Function을 정리해보자.

1. Apply

// apply를 활용하면 다음의 방법으로 수신객체의 프로퍼티 지정이 가능함

// 프로퍼티 설정 시 마다 Person을 쓰지 않아도 돼서 가독성이 좋음

val person = Person().apply {
	name = "im"
	age = 29
}

2. run

// run은 apply와 똑같이 동작하지만 수신객채를 retrun하지 않음
// run 블록의 마지막 라인을 ruturn하는 범위 지정 함수

// data.kt
data class Person(
	val person = Person().apply {
		name = "im"
		age = 29
)	{
	fun isOld() : Boolean = age > 29 
}

// main.kt
fun main() {
	val person = Person(name = "im", age = 29 )
	val isOld = person.run {
		age = 28
		isOld() // retrun 값
	}	
	println($isOld) // false
}

3. with

// with는 수신 객체에 대한 작업 후 마지막 라인 return
// run과 유사함 with는 실제로 거의 쓰이지 않음 (run을 쓰자!!)

fun main() {
	val person = Person(name = "im", age = 29 )
	val isOld = with(person) {
		age = 28
		isOld() // retrun 값
	}	
	println($isOld) // false
}

4. let

// let은 수신객체를 이용해 작업을 한 후 마지막 줄을 reutrn할 때 사용
// run이나 with등을 쓸때는 it으로 접근해야 함

/**
 * 1. Null check 후 코드를 실행해야 하는 경우
 * 2. Nullable 한 수신객체를 다른타입의 변수로 변환해야 하는 경우
 */

fun main () {
	var person: Person? = null
	val ischk = person?.let { it: Person ->
		fnToOldChk(it)
	}
}

// 실무에서는 Nullable한 값이 아닐 경우에는 urn을 사용하는것이 일반적

5. also

// 잘 안쓰임, 보통 로깅이나 디버깅등에 쓰임
profile
언제나 항상 즐겁게 New vibes 😎

0개의 댓글