전역 변수의 옵저버 동작 및 계산된 전역 상수 – Swift

Swift의 Struct, Class 및 Enum 타입은 계산프로퍼티(computed properties)를 가질 수 있다. 이는 해당 인스턴스가 어떤 값이나 참조를 저장할 저장공간을 따로 갖지 않고 다른 값에 의존하는 값을 계산하여 리턴할 수 있게 한다. 또 저장 프로퍼티(stored properties)를 정의할 수 있는 Struct, Class의 경우에는 각 프로퍼티 값이 변경되는 시점 전후의 동작을 추가할 수 있는 옵저버를 적용하는 것도 가능하다.

그런데 이러한 기능들은 단지 프로퍼티에서만 적용되는 것은 아니다. 별로 알려져 있지는 않지만 전역/지역 변수나 상수에 대해서도 이렇게 적용하는 것이 가능하다. 즉 아래와 같이 최상위 레벨의 상수나 변수에 대해서 computed 값을 쓰거나, 업데이트 시 동작을 처리하는 것이 가능하다.

// 특정 클래스나 구조체 내부가 아닌 최상위 레벨 코드
var i: Int = 0 {
  didSet {
    if i > 10 { print("i is greater than 10") }
  }
}

var isBig: Bool {
  return i > 10
}

for _ in 0..<20 {
  if !isBig {
    print(i)
  }
}