[swift] 클로저 사용시 발생할 수 있는 사이드 이펙트

클로저는 Swift 언어에서 강력하고 유용한 기능 중 하나입니다. 그러나 클로저를 사용하면서 주의해야 할 점은 사이드 이펙트(side effect)입니다.

사이드 이펙트는 함수나 클로저가 외부 상태에 영향을 준다는 것을 의미합니다. 이는 예측 불가능한 동작을 초래할 수 있고, 코드의 가독성과 유지보수성을 저하시킬 수 있습니다. 따라서 우리는 클로저를 사용할 때 사이드 이펙트를 최소화해야 합니다.

사이드 이펙트의 예

  1. 외부 변수 변경: 클로저가 외부 변수를 변경하면, 해당 변수의 값은 클로저를 호출하는 위치에서도 변경될 수 있습니다.
var count = 0

let increment = {
    count += 1
}

increment()
print(count) // 1
  1. 외부 함수 호출: 클로저 내부에서 외부 함수를 호출하면, 클로저의 동작은 외부 함수에 의해 변경될 수 있습니다.
func addToCount(value: Int) {
    count += value
}

let addFive = {
    addToCount(value: 5)
}

addFive()
print(count) // 6

사이드 이펙트 최소화 방법

  1. 불변성 유지: 클로저 내부에서 외부 변수를 변경하지 않고, 상태를 바꾸는 대신 새로운 값을 반환합니다.
var count = 0

let increment = {
    return count + 1
}

count = increment()
print(count) // 1
  1. 인자 전달: 외부 함수 호출 대신 클로저에 필요한 값을 인자로 전달합니다.
func addToCount(value: Int, currentCount: Int) {
    return currentCount + value
}

let addFive = {
    return addToCount(value: 5, currentCount: count)
}

count = addFive()
print(count) // 6

결론

클로저는 유용한 기능이지만 사이드 이펙트를 관리하는 것은 중요합니다. 이러한 사이드 이펙트를 최소화하기 위해 불변성을 유지하고, 인자 전달을 활용하는 것이 좋습니다. 코드의 가독성과 유지보수성을 높이기 위해, 클로저를 사용할 때 사이드 이펙트에 주의하며 코드를 작성해야 합니다.