Reflection
Objective-C에서 자바의 Reflection 에 해당하는 기능을 Introspection(인트로스펙션) 이라고 합니다.
이 기능들은 <objc/runtime.h>
헤더 파일에 선언되어 있으며, C 함수로 작성되어 있습니다.
사용할 수 있는 메소드는 애플 개발자 센터 가이드에서 확인 가능합니다.
애플 개발자 센터 Runtime 개발 가이드
가이드 문서에서 확인할 수 있듯이 수십여 가지의 메소드로 다양한 인스트로펙션 기능을 제공하고 있습니다.
Introspection을 이용해서 다양한 기능을 구현할 수 있습니다.
- 특정 객체가 특정 Protocol, Method이 있는지 조사하여 앱 크래시 방지
- 외부 API Response로 내려온 json, XML 등을 Object Model 에 매핑할 때
Instropection을 이용한 XMl Object Mapper 구현예제
스터디용으로 공공데이터를 이용한 앱을 만드는 작업을 하고 있는데, 대부분의 Response형태가 XML
로 되어 있습니다. json
이면 좋을텐데 ㅠㅜ
NSXMLParser로 XML Object Mapper 구현하기 (공공데이터 Response 파싱하기) 포스트 보러가기
Parser에서 사용한 Instropection
class_copy_PropertyList(Class, int *)
int propertiesCount = 0;
objc_property_t *properties = class_copyPropertyList(objectClass, &propertiesCount);
objectClass클래스가 가진 objc_property_t 구조체들을 array로 리턴하며 배열 갯수는 propertiesCount에 담겨집니다.
이렇게 반환된 properties
변수는 나중에 반드시 free(properties)
호출되어야 합니다.
property_getName(objc_property_t)
const char *cname = property_getName(property);
NSString *name = [NSString stringWithUTF8String:cname];
프로퍼티의 이름 (클래스) 이름을 const char 타입으로 리턴합니다.
NSString의 stringWithUTF8String을 통해 NSString으로 wrapping 가능 합니다.
… 추가 작성 예정