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 |
댓글