닷넷 응용 프로그램의 어셈블리 파일 안에는 메타데이터(metadata)가 있다. 하지만 그 말의 의미를
실감할 수는 없었을 것이다. BCL에서 제공되는 리플렉션(reflection) 관련 클래스를 이용하면 메타데
이터 정보를 얻는 것이 가능하므로 이제 그 유용성을 직접 코드로 확인해보자.
리플렉션을 본격적으로 알아보기에 앞서 우선 닷넷 응용 프로그램의 프로세스 구조를 먼저 살펴볼
필요가 있다. 닷넷 프로세스는 운영체제에서 EXE 프로세스로 실행되고 그 내부에 CLR에 의해
“응용 프로그램 도메인(AppDomain: Application Domain)”이라는 구획으로 나뉜다.
AppDomain은 CLR이 구현한 내부적인 격리 공간이다. 따라서 AppDomain 간에는 별도의 통신 방법
을 설정하지 않는 한 서로의 영역을 침범할 수 없다. 심지어 하나의 AppDomain이 불안정하게 종료
된다고 해도 다른 AppDomain이 동작하는 데는 아무런 영향도 미치지 않는다. 일반적으로 만들게 되
는 콘솔 응용 프로그램은 1개의 공유 AppDomain과 1개의 기본 AppDomain으로 시작하지만 원한다
면 임의로 만드는 것도 가능하다.
<aside> ☄️ 2개 이상의 AppDomain은 닷넷 프레임워크 버전에서 지원되고, 닷넷 코어/5+ 에서는 오직 한 개의 AppDomain만 허용된다.
</aside>
AppDomain이 만들어지면 그 내부에 어셈블리들이 로드된다.

*.exe 어셈블리는 닷넷 EXE 프로세스가 시작하면서 생성된 기본 AppDomain에 로드되어 실행된 것
이다. 리플렉션을 이용하면 현재 AppDomain의 이름과 그 안에 로드된 어셈블리 목록을 구할 수 있