KOTLIN

[KOTLIN] 변수의 스코프 최소화 (이펙티브코틀린)

집한구석 2022. 6. 18. 17:06
728x90

이펙티브 코틀린 변수의 스코프 최소화

  • 최대한 좁은 스코프를 갖게 변수를 사용하는 것이 좋음
  • 반복문 내부에서만 변수가 사용된다면 변수를 반복문 내부에 작성하는 것이 좋음

스코프를 최소화하는 것이 좋은 이유 

  • 디버깅하기 수월
  • mutable 프로퍼티는 좁은 스코프에 걸쳐 있을수록 디버깅이 용이함
  • 변수의 범위가 넓으면, 다른 개발자에 의해서 변수가 잘못 사용될 수 있음
  • 변수는 읽기 전용 또는 읽고 쓰기 전용 여부와 상관 없이, 변수를 정의할 때 초기화되는 것이 좋음
  • if, when, try-catch, Elvis 표현식 등을 활용하면, 변수를 정의할 때 초기화할 수 있음

스코프 최소화 예시

// 나쁜 예
var user: User
for (i in users.indices) {
	user = users[i]
	print("User at $i is $user")
}

// 조금 더 좋은 예
for (i in users.indices) {
	val user = users[i]
	print("User at $i is $user")
}

// 제일 좋은 예
for ((i, user) in users.withIndex()) {
	print("User at $i is $user")
}

//나쁜 예
val user: User
if (hasValue) {
	user = getValue()
} else {
	user = User()
}

// 조금 더 좋은 예
val user: User = if(hasValue) {
	getValue()
} else {
	User()
}

// 나쁜 예
fun updateWeather(degrees: Int) {
	val description: String
	val color: Int
	if (degrees < 5) {
		description = "cold"
		color = Color.BULE
	} else if (degrees < 23) { 
		desciption = "mild"
		color = Color.YELLOW
	} else {
		desciption = "hot"
		color = Color.RED
	}
}

// 조금 좋은 예
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
	}
}
  • 변수의 스코프는 예시처럼 최대한 좁게 만들어서 활용하는 것이 좋음
  • 최대한 타입 추론같은경우 val를 사용하여 가변성을 막아주는 것이 좋음
  • 해당 스코프와 불변선언을 하는 규칙을 지키면, 코드 퀄리티가 높아짐 (잘못되는 경우의 수가 줄어듬)

너무나 당연한 내용, 코틀린 아니더라도 모든 개발언어에 해당