상태를 정의할 때는 변수와 프로퍼티의 스코프를 최소화 하는것이 좋다.
- 프로퍼티 보다는 지역변수를 사용해라
- 최대한 좁은 스코프를 갖게 변수를 사용해라.
스코프를 좁게 만드는 가장 큰 이유는 프로그램을 추적하고 관리하기 쉽다.
mutable 프로퍼티는 좁은 스코프에 걸쳐 있을 수록 변경 추적이 쉽다.
여러 프로퍼티를 한번에 설정 해야 하는 경우 구조 분해 선언을 사용해라
fun updateWeather(degrees: Int) {
val (description, color) = when {
degrees < 5 -> "cold" to Color.BLUE
degrees < 23 -> "mild" to Color.YELLOW
else -> "hot" to Color.RED
}
}
결론적으로 변수의 스코프가 넓으면 위험하다.
캡처링
시퀀스를 사용하면 최종적인 prime 값으로만 필터링된다.
스코프를 넓게 쓰면 이런 캡처 문제가 발생할 수 있다.
val primes: Sequence<Int> sequence {
var numbers = generateSequence(2) { it + 1 }
var prime: Int
while (true) {
prime = numbers.first()
yield(prime)
numbers = numbers.drop(1).filter {it % prime != 0}
}
}
print(primes.take(10).toList())
//[2,3, 5, 6,1,8, 9, 10, 11, 12]
정리
여러 이유로 스코프는 좁게 활용하는게 좋다.
var 보단 val을 사용하는게 좋다.
람다에서 변수를 캡처한다.
참조
'Books > Effective Kotlin' 카테고리의 다른 글
아이템 1: 가변성을 제한하라 (0) | 2022.02.12 |
---|---|
이펙티브 코틀린 1장 : 안정성 (0) | 2022.02.12 |