와챠의 우당탕탕 코딩 일기장

[Kotlin]let/with/run/apply/also 본문

코딩 일기장/Android(Kotlin)

[Kotlin]let/with/run/apply/also

minWachya 2022. 2. 8. 20:28
반응형
  1. let
  2. with
  3. run
  4. apply
  5. also

 

0. 기본

기본적인 객체 생성 방법은 아래와 같다.

// 사람 데이터 클래스
data class Person(var name: String, var age: Int)

// 객체 생성
val person = Person("", 0)
person.name = "minWachya"
person.age = 23

// 출력
println("$person")	// Person(name=minWachya, age=23)

1. let

fun <T, R> T.let(block: (T) -> R): R
  • 자신(it)을 받아서 어떤 값을 반환함.
  • let 블럭 안에는 non-null 값만 가능
// 객체 생성
val person = Person("", 0)

// 경우 1: 자기 자신 반환
val result1 = person.let {
    it.name = "minWachya"
    it.age = 23
    it // 반환값
}
// 경우1 출력
println("$result1")	// Person(name=minWachya, age=23)

//--------------------------------------

// 경우2: 문자열 반환
val result2 = person.let {
    it.name = "minWachya"
    it.age = 23
    "{$name is $age}" // 반환값
}
// 경우2 출력
println("$result2")	// minWachya is 23

//--------------------------------------

// 경우3: 반환값 없음
val result3 = person.let {
    it.name = "minWachya"
    it.age = 23
}
// 경우3 출력
println("$result2")	// kotlin.Unit

2. with

fun <T, R> with(receiver: T, block: T.() -> R): R
  • non-null의 객체를 입력받아 블럭에서 그 객체를 사용함
// 객체 생성
val person = Person("minWachya", 23)

with(person) {
    println(name)	// minWachya
    println(age)	// 23
    // 주로 반환값 없음
    // 자기자신을 반환 시: this! // it 아님
}

3. run

1,

fun <T, R> T.run(block: T.() -> R): R
  • 어떤 값을 계산할 때
  • 여러 개의 지역변수 범위를 제한할 때 사용
val person = Person("minWachya", 23)
val addAge = person.run {
    ++age
}

println("$addAge")	// 24

 

2,

fun <R> run(block: () -> R): R
  •  객체 생성 명령문을 블럭 안에 묶음으로써 가독성을 높이는 역할
val person = run {
    val name = "minWachya"
    val age = 23
    Person(name, age)	// 반환값
}

4. apply

fun <T> T.apply(block: T.() -> Unit): T
  • 자기 자신 반환
    • 객체의 초기화/변경 시에 사용
// 객체 생성
val person = Person("", 0)
val result = person.apply {
    name = "minWachya"
    age = 23
}
// 출력
println("$person")	//Person(name=minWachya, age=23)

5. also

fun <T> T.also(block: (T) -> Unit): T
  • 자기 자신 반환
  • it 사용
  • 객체의 속성을 사용/변경하지 않는 사용하는 경우에 사용
  • 객체의 데이터 유효성을 확인하거나, 디버그, 로깅 등의 부가적인 목적으로 사용할 때에 적합
// 객체 생성
val person = Person("", 0)
val result = person.also {
    it.name = "minWachya"
    it.age = 23
}
// 출력
println("$person")	//Person(name=minWachya, age=23)

참고


그동안 Android Studio 쓰면서 많이 보던 것들인데... 차이를 정확히 모르겠어서 정리해봤다.

이렇게 정리해봤는데도 알쏭달쏨...^

반응형
Comments