스코프함수는 함수형 언어의 특징을 조금 더 편리하게 사용할 수 있도록 코틀린에서 기본으로 제공하는 함수들이다.
클래스에서 생성한 인스턴스를 스코프함수에 전달하면 인스턴스의 속성이나 함수를 좀 더 깔끔하게 불러 쓸 수 있다.
인스턴스를 생성한 후 특정 변수에 할당하기 전에 초기화 작업을 수행할 때 많이 사용한다.
apply 함수 내의 모든 명령이 수행되고나면 새로 생성된 인스턴스를 반환한다.
fun main(){
val book1 = Book("Kotlin", 10000).apply{
//기존에는 인스턴스 함수를 사용해 속성을 변경해주었다.
//book.name = "Kotlin 1"
//book.discount()
//apply 함수에서는 참조연산자를 통해 프로퍼티에 접근하지 않고 인스턴스 생성과 동시에 바로 초기화 가능
name = "Kotlin 1"
discount()
}
//apply함수를 통해 새롭게 정의된 프로퍼티가 book1 인스턴스에 적용된다.
println(book1.name)
println(book1.price)
class Book(var name: String, var price: Int){
fun discount(){
price -= 2000
}
}
apply와 동일하지만 마지막 구문을 반환값으로 변수에 저장한다.
특정 인스턴스의 프로퍼티를 출력하거나 계산값으로 활용하는 등의 핸들링을 할 때 사용하면 편리하다.
fun main(){
val book1 = Book("Kotlin", 10000).apply{
name = "Kotlin 1"
discount()
}
println(book1.name)
println(book1.price)
//run은 apply와 동일하지만 마지막 구문을 반환값으로 사용한다.
val book2 = book1.run{
//book1의 price를 book2라는 변수에 저장
price
}
println(book2)
}
class Book(var name: String, var price: Int){
fun discount(){
price -= 2000
}
}
run과 약간의 코드상의 차이를 제외하면 동일한 함수이다.
fun main(){
val book1 = Book("Kotlin", 10000).apply{
name = "Kotlin 1"
discount()
}
println(book1.name)
println(book1.price)
val book2 = book1.run{
price
}
println(book2)
val book3 = with(book1){
price
}
println(book3)
}
class Book(var name: String, var price: Int){
fun discount(){
price -= 2000
}
}