🎪 스코프 함수
📖 스코프 함수란?
스코프 함수는 객체의 컨텍스트 내에서 코드 블록을 실행하는 함수입니다. 객체를 더 간결하게 다룰 수 있습니다.
💡 5가지 스코프 함수
let - 객체를 it으로 받아 결과 반환
apply - 객체를 this로 받아 객체 자체 반환 (초기화)
run - 객체를 this로 받아 결과 반환
also - 객체를 it으로 받아 객체 자체 반환 (부가 작업)
with - 객체를 this로 받아 결과 반환 (확장 함수 아님)
🔧 let
기본 사용
fun main() {
val name = "홍길동"
val result = name.let {
println("이름: $it")
it.length // 반환값
}
println("길이: $result") // 길이: 3
}
null 체크
fun main() {
val name: String? = "홍길동"
// null이 아닐 때만 실행
name?.let {
println("이름: $it")
println("길이: ${it.length}")
}
}
지역 변수 대신
fun main() {
// ❌ 지역 변수 사용
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.filter { it > 2 }
println(result)
// ✅ let 사용 (더 간결)
listOf(1, 2, 3, 4, 5)
.filter { it > 2 }
.let { println(it) }
}
🎨 apply
객체 초기화
data class Person(var name: String = "", var age: Int = 0)
fun main() {
val person = Person().apply {
name = "홍길동" // this.name
age = 25 // this.age
}
println(person) // Person(name=홍길동, age=25)
}
빌더 패턴
class StringBuilder {
private val sb = StringBuilder()
fun append(text: String) = apply {
sb.append(text)
}
fun appendLine(text: String) = apply {
sb.appendLine(text)
}
override fun toString() = sb.toString()
}
fun main() {
val text = StringBuilder()
.append("안녕하세요")
.appendLine("!")
.append("반갑습니다")
.toString()
println(text)
}