SlideShare uma empresa Scribd logo
1 de 11
Reflection 번역: 반영(?????)
대체 Reflection이 뭐임?
RTTR은 어떻게 쓰냐 보다는
reflection이 뭔지, 어디에 쓰는 건지가 중요.
현재 c++ 자체에는 없는 개념이며,
c#, 자바에서는 이미 기본으로 제공하는 기능.
In wiki
컴퓨터 과학에서, 반영(Reflection)은 컴퓨터 프로그램에서 런타임 시점에 사용되는 자신의 구조와 행
위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미한다.
“type introspection”은 객체 지향 프로그램언어에서 런타임에 객체의 형(type)을 결정할 수 있는 능력
을 의미한다.
Reflextion
정의된 클래스, 구조체, enum등을
1. 동적으로 로드
2. 속성들(멤버 함수, 멤버 변수 등)의 목록 반환
3. 속성에 접근 또는 호출
개발툴 제작이나 디컴파일 프로그램에 쓴다고 함.
제너릭 프로그래밍에도 쓰일 듯
가독성이 상당히 떨어지고, 컴파일 시에 타입체
킹을 하지 않기 때문에 많이 쓰면 성능문제가 발
생한다고 함.
출처: 워킹레벨 자바7 실무 바이블:
고급 프로그래머가 알아야 할 프로
젝트 자바
설치 방법
http://www.rttr.org/download의 다음 binaries중에 원하는것을 다운받는다.
압축을 풀면 다음 폴더들이 있다.
동적 라이브러리 형태이며, bin에 dll이 있다. 이 폴더들을 visual studi에 경로 설정을 해주면 된다.
동적 라이브러리 등록 방법: http://transparentworld.tistory.com/53
객체 등록
//객체 선언
#include <rttr/registration>
using namespace rttr;
struct MyStruct {
MyStruct() {};
void func(double) {};
int data;
};
RTTR_REGISTRATION {
registration::class_<MyStruct>("MyStruct")
.constructor<>()
.property("data", &MyStruct::data)
.method("func", &MyStruct::func);
}
//멤버변수 등록
//멤버함수 등록
//생성자 등록(현재 기본형이므로 그냥 둠)
멤버 iteration
type t = type::get<MyStruct>(); // type객체로 클래스 정보를 받음
for (auto& prop : t.get_properties()) //get_properties로 멤버변수 벡터를 받음
std::cout << "name: " << prop.get_name() << std::endl;
for (auto& meth : t.get_methods()) // get_methods로 멤버변수 벡터를 받음
std::cout << "name: " << meth.get_name() << std::endl;
객체 생성 방법
객체 생성 방식에는 다음 두가지가 있으며,
빨간색 부분에서 제너릭 프로그래밍적인 요소가 보인다.
1. create()를 이용.
Type t = type::get_by_name("MyStruct"); //객체 타입을 받음
Variant var = t.create(); //create함수로 객체 생성.
std::cout << var.get_type().get_name(); // prints 'MyStruct'
2. Invoke 이용.
constructor ctor = t.get_constructor(); //constructor 변수에 객체 생성자를 받음
Variant var = ctor.invoke(); //invoke 함수로 생성자를 호출해 객체 생성.
std::cout << var.get_type().get_name(); // prints 'MyStruct'
멤버변수 get, set
MyStruct obj; //객체 생성
Property prop = type::get(obj).get_property(“data”); //obj의 data 멤버변수를 get.
prop.set_value(obj, 23); //멤버변수의 값을 23으로 set
variant var_prop = prop.get_value(obj); //멤버변수 값 가져오기.
Std::cout << var_prop.to_int(); // prints '23‘ //int로 반환
//property는 클래스 자체의 멤버변수 타입에 대한 정보를 가지고 있는듯.
//그래서 어느 객체의(obj) 멤버변수 값을 바꿀지를 지정해야한다.
함수 호출
MyStruct obj; //객체 생성
method meth = type::get(obj).get_method("func"); //method변수에 함수 받기
meth.invoke(obj, 42.0); //매개변수를 42.0으로 함수 호출.

Mais conteúdo relacionado

Mais procurados

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더포프 김
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현민웅 이
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문Jin Woo Lee
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머포프 김
 

Mais procurados (20)

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
Compute shader
Compute shaderCompute shader
Compute shader
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머
 

Destaque

MsgPack 정리
MsgPack 정리MsgPack 정리
MsgPack 정리Seokmin No
 
Cppformat에 대해서 알아봅시다 v 0.7
Cppformat에 대해서 알아봅시다 v 0.7Cppformat에 대해서 알아봅시다 v 0.7
Cppformat에 대해서 알아봅시다 v 0.7JongSung Hwang
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치흥배 최
 
signal과 slot, 그리고 jl_signal 라이브러리
signal과 slot, 그리고 jl_signal 라이브러리signal과 slot, 그리고 jl_signal 라이브러리
signal과 slot, 그리고 jl_signal 라이브러리JongSung Hwang
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++지환 김
 
Wtl로 소레미 만들기
Wtl로 소레미 만들기Wtl로 소레미 만들기
Wtl로 소레미 만들기Seokmin No
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기Myoung-gyu Gang
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들Jinsub Jung
 

Destaque (20)

MsgPack 정리
MsgPack 정리MsgPack 정리
MsgPack 정리
 
Cppformat에 대해서 알아봅시다 v 0.7
Cppformat에 대해서 알아봅시다 v 0.7Cppformat에 대해서 알아봅시다 v 0.7
Cppformat에 대해서 알아봅시다 v 0.7
 
Rapid json tutorial
Rapid json tutorialRapid json tutorial
Rapid json tutorial
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
 
Easyloggingpp
EasyloggingppEasyloggingpp
Easyloggingpp
 
Unqlite
UnqliteUnqlite
Unqlite
 
signal과 slot, 그리고 jl_signal 라이브러리
signal과 slot, 그리고 jl_signal 라이브러리signal과 slot, 그리고 jl_signal 라이브러리
signal과 slot, 그리고 jl_signal 라이브러리
 
WTL 소개
WTL 소개WTL 소개
WTL 소개
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++
 
Wtl로 소레미 만들기
Wtl로 소레미 만들기Wtl로 소레미 만들기
Wtl로 소레미 만들기
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Monkey space 2013
Monkey space 2013Monkey space 2013
Monkey space 2013
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 

Semelhante a Refelction의 개념과 RTTR 라이브러리

게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차HyunJoon Park
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
9 object class
9 object class9 object class
9 object class웅식 전
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design patternSukjin Yun
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나병걸 윤
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton patternYoonJong Choi
 
[Swift] Extensions
[Swift] Extensions[Swift] Extensions
[Swift] ExtensionsBill Kim
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 

Semelhante a Refelction의 개념과 RTTR 라이브러리 (20)

게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
9 object class
9 object class9 object class
9 object class
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
[Swift] Extensions
[Swift] Extensions[Swift] Extensions
[Swift] Extensions
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 

Refelction의 개념과 RTTR 라이브러리

  • 2. 대체 Reflection이 뭐임? RTTR은 어떻게 쓰냐 보다는 reflection이 뭔지, 어디에 쓰는 건지가 중요. 현재 c++ 자체에는 없는 개념이며, c#, 자바에서는 이미 기본으로 제공하는 기능.
  • 3. In wiki 컴퓨터 과학에서, 반영(Reflection)은 컴퓨터 프로그램에서 런타임 시점에 사용되는 자신의 구조와 행 위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미한다. “type introspection”은 객체 지향 프로그램언어에서 런타임에 객체의 형(type)을 결정할 수 있는 능력 을 의미한다.
  • 4. Reflextion 정의된 클래스, 구조체, enum등을 1. 동적으로 로드 2. 속성들(멤버 함수, 멤버 변수 등)의 목록 반환 3. 속성에 접근 또는 호출 개발툴 제작이나 디컴파일 프로그램에 쓴다고 함. 제너릭 프로그래밍에도 쓰일 듯 가독성이 상당히 떨어지고, 컴파일 시에 타입체 킹을 하지 않기 때문에 많이 쓰면 성능문제가 발 생한다고 함. 출처: 워킹레벨 자바7 실무 바이블: 고급 프로그래머가 알아야 할 프로 젝트 자바
  • 5. 설치 방법 http://www.rttr.org/download의 다음 binaries중에 원하는것을 다운받는다. 압축을 풀면 다음 폴더들이 있다. 동적 라이브러리 형태이며, bin에 dll이 있다. 이 폴더들을 visual studi에 경로 설정을 해주면 된다. 동적 라이브러리 등록 방법: http://transparentworld.tistory.com/53
  • 6.
  • 7. 객체 등록 //객체 선언 #include <rttr/registration> using namespace rttr; struct MyStruct { MyStruct() {}; void func(double) {}; int data; }; RTTR_REGISTRATION { registration::class_<MyStruct>("MyStruct") .constructor<>() .property("data", &MyStruct::data) .method("func", &MyStruct::func); } //멤버변수 등록 //멤버함수 등록 //생성자 등록(현재 기본형이므로 그냥 둠)
  • 8. 멤버 iteration type t = type::get<MyStruct>(); // type객체로 클래스 정보를 받음 for (auto& prop : t.get_properties()) //get_properties로 멤버변수 벡터를 받음 std::cout << "name: " << prop.get_name() << std::endl; for (auto& meth : t.get_methods()) // get_methods로 멤버변수 벡터를 받음 std::cout << "name: " << meth.get_name() << std::endl;
  • 9. 객체 생성 방법 객체 생성 방식에는 다음 두가지가 있으며, 빨간색 부분에서 제너릭 프로그래밍적인 요소가 보인다. 1. create()를 이용. Type t = type::get_by_name("MyStruct"); //객체 타입을 받음 Variant var = t.create(); //create함수로 객체 생성. std::cout << var.get_type().get_name(); // prints 'MyStruct' 2. Invoke 이용. constructor ctor = t.get_constructor(); //constructor 변수에 객체 생성자를 받음 Variant var = ctor.invoke(); //invoke 함수로 생성자를 호출해 객체 생성. std::cout << var.get_type().get_name(); // prints 'MyStruct'
  • 10. 멤버변수 get, set MyStruct obj; //객체 생성 Property prop = type::get(obj).get_property(“data”); //obj의 data 멤버변수를 get. prop.set_value(obj, 23); //멤버변수의 값을 23으로 set variant var_prop = prop.get_value(obj); //멤버변수 값 가져오기. Std::cout << var_prop.to_int(); // prints '23‘ //int로 반환 //property는 클래스 자체의 멤버변수 타입에 대한 정보를 가지고 있는듯. //그래서 어느 객체의(obj) 멤버변수 값을 바꿀지를 지정해야한다.
  • 11. 함수 호출 MyStruct obj; //객체 생성 method meth = type::get(obj).get_method("func"); //method변수에 함수 받기 meth.invoke(obj, 42.0); //매개변수를 42.0으로 함수 호출.