개발 노트 Reflection - (Data-Driven...) 2009/01/30 10:41 by cagetu

개인적으로 Data-Driven 에 관심이 많아서, Reflection에 대해 정리해 봅니다.
kimsama님의 Reflection 이야기를 참고하시면 되겠습니다.

Reflection이 이제는 너무 널리 알려진 내용이지만, 저 같이 스마트하지 못한 C++ 프로그래머한테는 아직은 생소한 내용일 수 있습니다.

Reflection에 대해서 자세한 내용은 POSA(Pattern-Oriented Software Architecture) 1판 의 Reflection 아키텍쳐 패턴을 읽어보시면 이해가 빠르실 것 같구요. 개인적으로는
Metaclasses and Reflection in C++아티클이 대박인 듯 합니다. 소스코드도 공개하구요.

간단히 요약하면, Class와 Object로 코드 레벨을 나눌 수 있는데, 우리가 작성하는 Class를 이용하여, 객체(Object)를 생산하니까, Class는 Meta Level 이겠지요... 물론, Compile Time에서 이야기 입니다. 그럼, Run-Time에서 할 수 있다면 얼마나 좋을까요?
아마 Run-time에서 Class를 작성하는 것처럼 MetaClass를 변경하면, 아마도 MetaClass를 바라보는 Object가 변경되겠지요.. 마치 Code를 변경한 것처럼...
또, Serializer를 통해서, MetaClass를 네트웍으로 전송한다면, 다른 사람들도, 모두 변경된 내용을 공유할 수 있겠네요.. 마치 svn에서 소스를 올리고, 내려받은 것처럼, Run-Time에서 가능할 수 있다는 이야기입니다. 이렇게 변경할 수 있는 방법을 MOP(MetaObject Protocal)이라고 하는군요.

On Reflection and Serialization을 보시면, Serialization에 대해서도 간략히 보실 수 있겠고요.
Serialization에 대해서는 저보다 더 많은 것을 알고 계신 분들이 많을 것입니다.

Nebula의 Mangalore가 왜 그렇게 DB와 연동되어 있는지도 이해가 되는군요. MetaClass를 만들기 위해서 였네요.

용어가 몇가지 혼돈이 오는 것이 있습디다. 혼돈하지 마시길.. (저만 그랬나 봅니다.. -_-;;)

  • Class VS Object
  • Attribute VS Property

김사마님이 소개하신 Nocturnal Initiative 프로젝트의 ToolFramework을 보시면, 구현 예를 보실 수 있습니다.


핑백

  • CrazyXIII : 오브젝트 캐스팅 2017-09-05 16:48:21 #

    ... ) 이런 방식으로 작업했을 것 같다. ObjectSystem에 추가적으로 Seriailize 정도는 구현을 하면 좋을 것 같은데, Reflication과 Serialization 내용도 다시 리뷰해봐야겠다. 그래도 과거의 내가 한 공부가 헛된 일은 아니었나보다.. ㅎㅎ ... more

덧글

  • 최익필 2010/07/29 02:24 # 삭제 답글

    이런 황금같은 글에 댓글이 없어서 남깁니다.
    C++ 을 C++/CLI 로 포팅하는 중 리플렉션을 사용해서 보다 쉽게 포팅 하려고 했는데,
    C++ 단에서 리플렉션 정보를 심어주지 않는 이상 할수가 없었습니다.

    그래서 구글링하다가, 여기까지 들어오게 되었네요.

    관련 키워드 잘 심어 갑니다.
  • 술취한아저씨 2010/09/01 17:20 # 답글

    Car.create("Benz"); 가 하고 싶었는데 그게 리플렉션이었군요!
    C#에는 있는데 C++에 없어서 만들어주어야한다고 한. 얼핏 예전 프로젝트에서 본듯.

    리팩토링->패턴->아키텍쳐 빌드로 레벨업 노가다(?)하고 있는중이에요.
    얼른 읽고 POSA 도 사봐야지!
댓글 입력 영역



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu