Scope Function은 범위 함수라고 불린다.
람다식을 사용해 호출하면, 일시적으로 범위가 형성되고, 람다를 부른 객체나 수신객체에 자유롭게 접근이 가능하게하는 기능이다.
Scope Function에는 다음과 같은 기능이 있다.
- apply
- with
- let
- also
- run
이 기능들은 코드를 읽기쉽도록 도와주는 역할을 한다.
람다로 묶인 객체가 무슨 기능을 하는지 한눈에 파악이 가능하다.
val person = Person().apply {
firstName = "Name"
lastName = "Last"
}
위와 같이 표현하면, this를 통해서 접근하므로, this를 생략하고 사용한다. 즉, 자바의 생성자에서 객체를 호출하고 사용하는 것과 유사하다.
Random.nextInt(100).also {
print("getRandomInt() generated value $it")
}
Random.nextInt(100).also { value ->
print("getRandomInt() generated value $value")
}
val number: Int?
val sumNumberStr = number?.let {
"${sum(10, it)}"
}
val number: Int?
val sumNumberStr = number?.let {
"${sum(10, it)}"
}.orEmpty()
val person = Person()
with(person) {
work()
sleep()
println(age)
}
val result = service.run {
port = 8080
query()
}
port를 초기화한 후 query의 값을 반환해준 값이 result에 저장된다.
data class JavaObject(val s: String)
코틀린에서 모델 클래스를 사용할 때, 데이터클래스를 이용한다.
button.setOnClickListener { v ->
버튼의 동작
}
var nullableNumber: Int? = null
//나중에 초기화할 것이니 상관하지 않음
lateinit var lateinitNumber: Int
//뒤늦게 초기화되는 코드
lateinitNumber = 10
//사용할 때
nullableNumber?.add()
lateinitNumber.add()
var lazynumber :Int by lazy {
100
}
//사용하기 전까지는 100이 lazynumber 변수에 할당이 되지 않는다.
//사용할 때, 할당
lazynumber.add()