scope 함수?
kotlin 공식 문서에 따르면, 객체의 context 내에서 코드 블록을 실행하는 것을 목적으로 하며 함수 호출 시 객체의 이름 없이 객체에 접근 할 수 있는 기능을 가진 함수를 scope function이라고 한다. 이 스코프 함수에는 let, run, with, apply, also가 있다
예제를 통해 이 함수들에 대해 정리해보았습니다.
data class Person(val name: String, age: Int, department: String, club: String?)
data class Club(val name: String, val member: List<Student>)
val gdsc = Club("GDSC", emptyList())
val hyejin = Person("hyejin", 23, "software", null)
let은 확장함수로, 반환 결과가 람다의 결과이다
null 체크에 유용하게 쓰인다
hyejin.club?.let {
print("가입한 club: $it")
}
apply는 확장함수로, 반환 결과가 객체 자신이다.
hyejin.apply {
this.club = "GDSC"
}
also는 확장함수로, 반환 결과가 객체 자신이다.
gdsc.member.plus(hyejin).also {
print("전체 회원들: $it")
}
with는 확장함수가 아니며, 반환 결과는 람다의 결과이다.
with(gdsc) {
print("club의 이름: ${this.name}")
print("club의 멤버: ${this.member}")
}
run은 확장함수로, 반환 결과는 람다의 결과이다.
val members = gdsc.run{
this.member.size
}