Microsoft MVP성태의 닷넷 이야기
.NET Framework: 694. 닷넷 - <Module> 클래스의 용도 [링크 복사], [링크+제목 복사],
조회: 18370
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)

닷넷 - <Module> 클래스의 용도

가령 PresentationCore 어셈블리를 보면 다음과 같이 네임스페이스에 속하지 않는 클래스들과 함께 <Module> 클래스가 보입니다.

cpp_cli_module_class_1.png

보는 바와 같이 정적 생성자 코드도 있는데요, 일반적인 C# 클래스와 다를 바가 없습니다.

하지만 C# 프로젝트에서는 이렇게 숨겨진 <Module> 클래스를 사용하지 않으므로 거의 비어 있게 됩니다. 반면, 언제나 이걸 사용하는 닷넷 언어로는 C++/CLI가 있습니다. 예를 들어, Visual C++ 언어로 CLR 프로젝트 형식을 만들어 빌드하면 기본적으로 다음과 같은 <Module> 클래스가 구성됩니다.

cpp_cli_module_class_2.png

위의 목록을 가만히 보면, C/C++의 네이티브 함수 및 변수인 것을 알 수 있습니다. 실제로 다음과 같이 C++/CLI에서 코드를 만들어,

#pragma once

#include <stdio.h>

using namespace System;

void my_func()
{
    printf("%d", 5);
}

namespace ClassLibrary1 {

    public ref class Class1
    {
    public:
    };
}

빌드 후 .NET Reflector로 확인하면 my_func 함수가 <Module> 클래스에 속한 것을 볼 수 있습니다.

사실 그럴 수밖에 없습니다. 왜냐하면 닷넷 세계에서 모든 메서드 및 변수는 반드시 클래스에 속해 있어야 하기 때문입니다. 결국 전역 C/C++ 함수의 경우 클래스에 속하지 않으므로 어쩔 수 없이 <Module>이라는 내부 클래스를 만들고 그 안에 전역 함수를 강제로 밀어 넣어 .NET DLL을 구성하는 것입니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 10/18/2017]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...
NoWriterDateCnt.TitleFile(s)
12836정성태9/10/202115486Linux: 45. 리눅스 - 실행 중인 다른 프로그램의 출력을 확인하는 방법
12835정성태9/7/202117303.NET Framework: 1116. C# 10 - (15) CallerArgumentExpression 특성 추가 [2]파일 다운로드1
12834정성태9/7/202115450오류 유형: 762. Visual Studio 2019 Build Tools - 'C:\Program' is not recognized as an internal or external command, operable program or batch file.
12833정성태9/6/202113559VC++: 150. Golang - TCP client/server echo 예제 코드파일 다운로드1
12832정성태9/6/202115570VC++: 149. Golang - 인터페이스 포인터가 의미 있을까요?
12831정성태9/6/202112753VC++: 148. Golang - 채널에 따른 다중 작업 처리파일 다운로드1
12830정성태9/6/202117051오류 유형: 761. Internet Explorer에서 파일 다운로드 시 "Your current security settings do not allow this file to be downloaded." 오류
12829정성태9/5/202118379.NET Framework: 1115. C# 10 - (14) 구조체 타입에 기본 생성자 정의 가능파일 다운로드1
12828정성태9/4/202115626.NET Framework: 1114. C# 10 - (13) 단일 파일 내에 적용되는 namespace 선언파일 다운로드1
12827정성태9/4/202115799스크립트: 27. 파이썬 - 웹 페이지 데이터 수집을 위한 scrapy Crawler 사용법 요약
12826정성태9/3/202119502.NET Framework: 1113. C# 10 - (12) 문자열 보간 성능 개선 [1]파일 다운로드1
12825정성태9/3/202115658개발 환경 구성: 603. GoLand - WSL 환경과 연동
12824정성태9/2/202124900오류 유형: 760. 파이썬 tensorflow - Dst tensor is not initialized. 오류 메시지
12823정성태9/2/202114190스크립트: 26. 파이썬 - PyCharm을 이용한 fork 디버그 방법
12822정성태9/1/202119245오류 유형: 759. 파이썬 tensorflow - ValueError: Shapes (...) and (...) are incompatible [2]
12821정성태9/1/202114633.NET Framework: 1112. C# - .NET 6부터 공개된 ISpanFormattable 사용법
12820정성태9/1/202115565VC++: 147. Golang - try/catch에 대응하는 panic/recover [1]파일 다운로드1
12819정성태8/31/202116041.NET Framework: 1111. C# - FormattableString 타입
12818정성태8/31/202113899Windows: 198. 윈도우 - 작업 관리자에서 (tensorflow 등으로 인한) GPU 연산 부하 보는 방법
12817정성태8/31/202117651스크립트: 25. 파이썬 - 윈도우 환경에서 directml을 이용한 tensorflow의 AMD GPU 사용 방법
12816정성태8/30/202123366스크립트: 24. 파이썬 - tensorflow 2.6 NVidia GPU 사용 방법 [2]
12815정성태8/30/202115766개발 환경 구성: 602. WSL 2 - docker-desktop-data, docker-desktop (%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx) 파일을 다른 디렉터리로 옮기는 방법
12814정성태8/30/202120185.NET Framework: 1110. C# 11 - 인터페이스 내에 정적 추상 메서드 정의 가능 (DIM for Static Members) [2]파일 다운로드1
12813정성태8/29/202117272.NET Framework: 1109. C# 10 - (11) Lambda 개선파일 다운로드1
12812정성태8/28/202116599.NET Framework: 1108. C# 10 - (10) 개선된 #line 지시자
12811정성태8/27/202116478Linux: 44. 윈도우 개발자를 위한 리눅스 fork 동작 방식 설명 (파이썬 코드)
... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...