본문 바로가기
Kotlin

[코틀린] 표준 라이브러리 확장 함수 5가지 (let, also, apply, run, with)

by Sky Titan 2020. 10. 4.
728x90

표준 라이브러리 확장 함수

함수 접근 방법 반환 방법
T.let it block 마지막 결과값
T.also it caller 자체를 반환 (it)
T.apply this caller 자체를 반환 (this)
T.run 혹은 run this block 마지막 결과값
with this Unit

 

1. let

  • let()을 호출하는 객체(caller)를 람다식 블럭에 파라미터로 넘김
  • 'it'을 통해 호출 객체(caller)에 접근
  • 블럭의 결과값을 반환
import java.util.*


fun main() {

    var arr = arrayOf(1, 2, 3)
    arr.let { println("${it[1] + it[2]}") } //let 람다식 내부에서 arr[1] + arr[2] 를 출력

    println(arr.let { it[1] + it[2] }.plus(arr[0]))//let 람다식에서 계산한 arr[1] + arr[2] 를 반환하고 arr[0]을 더해서 출력
    
    /* 결과
    5
    6
     */
}

 

2. also

  • also()를 호출하는 객체(caller)를 람다식 블럭에 파라미터로 넘김
  • 'it'을 통해 호출 객체(caller)에 접근
  • 호출 객체(caller) 자체를 반환
import java.util.*

data class Student(var name : String, var age : Int)

fun main() {

    var student = Student("Park",11)

    var student2 = student.also {
        it.age = 15
        it.name = "kim"
    }

    println(student)
    println(student2)

    /* 결과
    Student(name=kim, age=15)
    Student(name=kim, age=15)
     */
}

 

3. apply

  • apply()를 호출하는 객체(caller)를 람다식 블럭에 파라미터로 넘김
  • 'this'를 통해 호출 객체(caller)에 접근
  • this는 생략이 가능
  • 호출 객체(caller) 자체를 반환
import java.util.*

data class Student(var name : String, var age : Int)

fun main() {

    var student = Student("Park",11)

    var student2 = student.apply {
        age = 15 //this 생략
        name = "kim" //this 생략
    }

    println(student)
    println(student2)

    /* 결과
    Student(name=kim, age=15)
    Student(name=kim, age=15)
     */
}

 

4. run

  • 호출 객체를 파라미터로 넘기는 방식, 객체 없이 사용하는 방식 둘 다 가능
  • 블럭의 결과값을 반환

fun main() {

    var a = 10
    var b = 15

    var result = run {
        var c = a + b
        println(c)
        c
    }//더하기 작업 수행 후 결과 c 반환

    result = result.run { plus(5) }
    println(result)
    /* 결과
    25
    30
     */
}

 

5. with

  • 인자로 받는 객체를 블럭에 파라미터로 전달
  • run() 함수와 기능은 거의 동일
  • Safe Call 지원하지 않음 → 종종 let과 함께 사용됨

data class People(var name : String, var age : Int)

fun main() {

    var people = People("Park", 15)

    var new_age = with(people){
        age = 20
        age
    }

    println(new_age)
    

    /* 결과
    20
     */
}

 

728x90

'Kotlin' 카테고리의 다른 글

[코틀린] 코루틴 (Coroutine)  (0) 2020.11.07
[코틀린] 배열 평탄화 flatten()  (0) 2020.10.04
[코틀린] 비트 연산자  (0) 2020.09.28
[코틀린] 배열 정렬하기  (0) 2020.09.26
[코틀린] 배열  (0) 2020.09.26

댓글