[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift

[Swift] Mirror

inu 2023. 5. 18. 21:44
반응형

Mirror

Mirror란

  • reflection은 일반적인 프로그래밍 기능 중 하나로, 런타임에 동적으로 멤버를 검사하고 작업할 수 있습니다. 원래는 Swift같이 정적으로 타입을 지정하는 언어에는 사용하지 않지만 Swift2부터 지원이 추가되었습니다.
  • Swift에서 reflection을 사용하면 struct, class 혹은 기타 타입에 관련없이 타입에 있는 stored property의 값을 읽을 수 있습니다.
  • reflection을 사용하기 위해 필요한 객체가 Mirror입니다.

  • Mirror는 인스턴스의 저장 property, collection 혹은 tuple의 요소 등에 대해 특정 인스턴스를 구성하는 부분을 설명합니다.
  • Mirror는 어떻게 Mirror가 렌더링될지 지정하는 "display style"이라는 property도 제공합니다.
  • Mirror 타입을 사용하면 모든 타입의 값 표현을 표시할 수 있습니다. 예를 들어 dump 메서드에서 해당 인스턴스의 런타임 내용을 렌더링하는데에도 Mriror가 사용됩니다.

Mirror 생성자

  • subject가 Mirror를 생성하고 싶은 인스턴스입니다.
  • 동적 객체가 CustomReflectable 프로토콜를 채택하고 있다면, mirror의 결과값은 customMirror property에 의해 결정됩니다.

Mirror 사용 예시

struct House {
    static var category: String = "building"
    var name: String
    var detail: String
    var pullName: String {
        return House.category + name
    }
}

let aHouse = House(name: "A", detail: "202")
print(aHouse)

let mirror = Mirror(reflecting: aHouse)
mirror.children.forEach { child in
    print(child)
}

// House(name: "A", detail: "202")
// (label: Optional("name"), value: "A")
// (label: Optional("detail"), value: "202")
  • static property 및 computed property를 제외한 stored property를 읽어올 수 있음을 확인할 수 있습니다.
  • 이러한 기능을 통해 특정 객체의 데이터를 JSON화 하는 등으로 응용하여 활용할 수 있습니다.

출처 및 참고 : https://developer.apple.com/documentation/swift/mirror

반응형