[swift] Swift에서 Reflection을 사용한 타입 확인

개요

Swift는 강력한 타입 시스템을 가지고 있으며, 컴파일 타임에서 타입을 확인할 수 있습니다. 그러나 때로는 실행 중에도 타입을 확인해야 할 때가 있습니다. 이러한 경우에 Reflection을 사용하여 Swift에서 타입을 확인할 수 있습니다.

Reflection이란?

Reflection은 프로그램이 실행 중에 자기 자신의 구조를 자세히 조사하고 내부 정보를 얻을 수 있는 능력을 의미합니다. Swift에서 Reflection을 사용하면 실행 중에 변수, 함수, 구조체, 클래스 등의 정보를 동적으로 액세스할 수 있습니다.

타입 확인하기

Swift에서는 Mirror라는 타입을 통해 Reflection을 제공합니다. Mirror는 실행 중인 인스턴스의 구조를 나타내는 정보를 제공합니다. 다음은 Reflection을 사용하여 타입을 확인하는 간단한 예제 코드입니다.

let sampleString = "Hello, World!"
let mirror = Mirror(reflecting: sampleString)

print(mirror.subjectType) // String

위의 코드에서 Mirror(reflecting:)로 인스턴스를 전달하여 Reflection을 생성합니다. 그런 다음 mirror.subjectType 프로퍼티를 통해 타입을 확인할 수 있습니다.

속성 확인하기

Reflection을 사용하여 인스턴스의 속성도 확인할 수 있습니다. 다음은 Reflection을 사용하여 인스턴스의 속성을 확인하는 예제 코드입니다.

struct Person {
    let name: String
    let age: Int
}

let person = Person(name: "John Doe", age: 30)
let mirror = Mirror(reflecting: person)

for case let (label?, value) in mirror.children {
    print("\(label): \(value)")
}

위의 코드에서 mirror.children을 이용하여 인스턴스의 속성을 순회하며 이름과 값을 출력합니다.

결론

Swift에서 Reflection을 사용하면 실행 중에 타입을 확인하고 인스턴스의 속성에 동적으로 액세스할 수 있습니다. 이를 통해 유연하고 동적인 코드를 작성할 수 있습니다. 그러나 Reflection을 남용하면 코드의 가독성과 성능에 영향을 줄 수 있으므로 신중하게 사용해야 합니다.

참고 자료