apply 사용
apply()는
apply()함수를 호출하는 객체를 이어지는 블록의 리시버{블록 안에 메서드 및 속성에 바로 접근할 수 있도록 할 객체}
로 전달하고, 객체 자체를 반환
val people01 = People().apply {
//this: People
// People 객체를 넘겨주고 속성을 초기화 한 후 people01 변수에 값을 넣어준다.
name = "ppppp"
age = 20
}
//run 사용법.
people01.run {
println("${people01.afterAge(age!!)}")
}
apply 를 사용하지 않는 동일한 코드는 다음과 같다.
val people02 = People()
people02.name = "ppp02"
people02.age = 21
//data class
//class
data class People(var name: String? = null,
var age: Int? = null) {
var doubleAge: Int? = null
}
let 사용
let()는
let() 함수를 호출하는 객체를 인자로 받아서 넘기고 블록의 결과값을 리턴해준다.
val people01 = People().apply {
//this: People
name = "ppppp"
age = 20
// age = 20
}
//억지스럽지만 이렇게도 된다.
people01.doubleAge = people01.age?.let { it + it }
let 함수
fun main(args: Array<String>) {
// 코틀린 let 함수
// public inline fun <T, R> T.let(block: (T) -> R): R
// T 를 인자로 받아서 블록안에 넘기고 (뭔가 작업을 하고)블록의 결과값 R을 리턴해줍니다.
// 어떤 변수 또는 리턴값이 있는 메서드에서 let함수를 호출 하면
// 호출한 변수값이나 메서드값을 {(블록)}의 인자로 넘기고
// {} 안에 결과값을 반환한다.(retrun)
// RxJava에서 map 함수와 비슷한 기능이랄까???
var number100 = 100
number100.let { it ->
//필요에 위해 가공을 한다면
val returnCount = it + it
//이렇게 값을 반환할 수 있다.
return@let returnCount
}
// let 함수의 리턴받을 변수가 없기에 number100 은 아무 변화가 없다.
println("number100 = $number100")
//let 함수를 호출하면
number100 = number100.let { it ->
//필요에 위해 가공을 한다면
val returnCount = it + it
//이렇게 값을 반환할 수 있다.
return@let returnCount
}
// number100 에 let 함수에서 받은 반환걊을 받아 값이 변하였다.
println("number100 = $number100")
//위 값에선 변화가 없지만.
// 새로운 변수를 지정하고 let 함수를 리턴 받으면.
// 앞에서 number100은 200이 되었다.
val number200 = number100.let { it ->
val returnCount = it + it
return@let returnCount
}
println("number200 = $number200")
// 예제.
fun doubleCount(count: Int): Int {
return count * count
}
val data = doubleCount(2).let {
// doubleCount 값 2*2를 인자로 받아서
// 4
return@let it + it
// 4+4 하고
// val returnData = it + it
// 그값을 리턴한다.
// returnData
}
println("$data")
}
'Kotlin > study' 카테고리의 다른 글
Retrofit, RxJava, AndroidProject (0) | 2019.01.30 |
---|---|
isNullOrBlank or isNullOrEmpty (0) | 2018.11.19 |
코틀린 클래스. (0) | 2018.10.04 |