Plug-In 식 개발이라는 것은 한 번쯤 들어보셨을 것이라 생각합니다. 확장이 쉽게 가능하다는 장점을 지니고 있는 개발방식이지요. 물론 단점도 존재합니다. 이 개발 방식에 대한 간략한 방식은 DLL로 각종 세분화 되는 구현을 빼내고, 주요 로직은 내부 어플리케이션에 존재하여 세분화 구현만 DLL에서 Export된 함수를 호출하여 실행되는 방식입니다.
Windows 같은 기본 Win32 API같은 경우 LoadLibrary(혹은 LoadLibraryEx)와 GetProcAddress 함수의 조합으로 해당 DLL에 대한 호출을 실행할 수 있습니다. 그게 아닐 경우는 Self Registry COM 이 아닌 보통의 기존 COM DLL일 경우 Registry를 검색하여 원하는 정보를 추출하여 해당 클래스의 인스턴스를 생성 작동시킬 수 있습니다. 고로 동적인 개발이 가능하다는 장점이 존재하지요.
그런데 .Net이나 Java같은 경우는 어떻게 대처해야 하냐구요?? 실제 Java는 제가 잘 다루지 않아 잘 모르겠지만 둘 다 모두 Reflection 이라는 방법이 존재합니다. 어떻게 하는지 잘 모르겠다구요??
일단 호출할 dll을 만들기 위하여 간단하게 GetTempValue라는 함수를 만들어 보았습니다. 뭐 이 정도는 대충 준비해줘야 하지 않겠습니까?^^. 그리고 이제 부터 MainApp에 들어갑니다.
Assembly.LoadFrom 함수로 Assembly를 불러오고 해당 Assembly에 속해있는 클래스의 타입을 얻어온 다음 Activator.CreateInstace 함수로 해당 type에 대한 객체를 실제로 생성하게 됩니다. 그런데 여기서 문제는 실제로 생성을 할 수는 있으나 해당 Class에 대한 정보가 존재하지 않기 떄문에 object 형으로 리턴된 개체의 멤버함수를 호출할 수가 없습니다. 그래서 MethodInfo 라는 것으로 해당 Method를 Invoke 호출하는 것이죠.
결과물은 예상하시다시피 1이 출력됩니다.
이 방법을 사용하면 .Net 환경에서 개발할 때 로직에 대한 세분화 과정을 Plug-In 식으로 설정할 수 있지 않을까요? 뭐 예를 든다면 간단히 SQL Server에 접속하는 것만 생각해도 Oracle, MS-SQL, MySql 등의 여러가지 DBMS가 있기 때문에 필요한 만큼 사용한다면 무척 유용한 개발이 될 것이라 생각이 되는군요.
물론 함수의 원형은 잘 밝혀 주어야 하겠죠^^; 다른 유용한 것을 찾아보고 발견한다면 또 정리해 올리겠습니다.
"Programming / Programming Tip" 분류의 다른 글
| Textcube 에서 XQuared 에디터를 쓰면서 Hooriza님의 Codehilight 사용 (0) | 2010/03/17 |
| Gradient에 대한 정리 (2) | 2009/01/07 |
| Com Control에서 Event 제작하기 (0) | 2008/07/10 |
| Com 개체를 Retun in Com Programming (2) | 2008/07/08 |
| FreeType 사용방법 (2) | 2008/07/07 |
TAG Reflection

댓글을 달아 주세요