🍎 Apple/Swift
[Swift] defer, 내부 코드를 매우 간단하게 만들고 싶을 때!
PushedGun
2023. 10. 24. 22:54
1. 더러운 switch 문
코드를 짜다, 다음과 같은 흉측한 switch 문이 만들어졌다.
func idState(id: String) -> IDState {
if isOutOfRangeID(id: id) {
idState = false
return .outOfRange
} else if isDuplicateID(id: id) {
idState = false
return .duplicate
}
idState = true
return .success
}
똑같은 idState 코드가 몇 번이나 반복된다.
idState = false 를 if문 위로 올려주는 방법도 있겠지만, 프로젝트에서 이 프로퍼티의 특성상 종료되는 순간에 확실한 bool 값을 가지도록 하여야 하였다.
2. defer
예전 NSLock을 사용했던 코드에서 쓰던 defer이 생각났다.
defer을 사용하면, 해당 defer이 포함되어있는 중괄호의 코드가 끝이 났을 때, defer 안의 코드를 실행하도록 할 수 있다.
따라서 중복 코드를 줄이기에 적합하다고 생각했다.
func idState(id: String) -> IDState {
var result = false
defer {
idState = result
}
if isOutOfRangeID(id: id) {
return .outOfRange
} else if isDuplicateID(id: id) {
return .duplicate
}
result = true
return .success
}
이렇게 defer을 사용하여, 종료된 순간에만 확살한 bool 값을 idState가 가질 수 있도록 하였고, 중복된 코드도 없앨 수 있었다.