오늘은 4일차로써 닷넷 어셈블리에 대해 조금더 이해를 해 보도록 하겠습니다. 원래 뭐든지 처음이 제일 어렵습니다. 지루하거나 따분해도 반복해서 보다보면 느낌이 팍 오면서 불쑥 이해가 될겁니다. (제가 보장 합니다!!) 아셨죠^^;
우선 닷넷 Assembly의 구조를 보도록 하죠~
각 어셈블리는 어셈블리에 들어 있는 것들을 서술하는 매니페스트 (Manifest ? 일종의 탑승자 명단 같은 것 ) 를 포함 합니다 . 매니페스트가 바로 어셈블리 메타 데이터인 것입니다 . 이 메타데이터는 자신이 담고 있는 모듈과 참조하는 다른 어셈블리에 대한 정보가 포함 됩니다 . .NET 런타임은 프로그램을 실행 할 때 프로그램의 어셈블리에 있는 매니페스트를 이용하여 시스템의 다른 어셈블리 ( 예를들면 “Hello World” 를 출력하는 WriteLine() 메소드를 담은 System.Console 등 ) 에 대한 참조를 알아 내는 것입니다 .
매니페스트 다음은 어셈블리 안에 담긴 클래스 , 속성 , 메소드 들과 그것들의 매개변수 및 반환값의 데이터 형식에 대한 정보를 가지고 있는 형식 메타 데이터 입니다 . 다음으로 실제 이진코드인 컴퓨터 독립적인 MSIL 코드가 있으며 마지막으로 어셈블리가 사용하는 리소스가 있습니다 . 리소스는 이미지 , 아이콘 , 메시지 파일 같은 프로그램의 비 실행 부분 ( .Resource 파일 안 ) 에 저장 됩니다 . 하나의 어셈블리는 보통 단 하나의 파일로 이루어 지지만 아래처럼 여러 개의 파일들이 하나의 어셈블리를 구성 하는 경우도 존재 합니다 .
.NET 런타임의 입장에서 보면 다중 파일 어셈블리는 그냥 여러 개의 파일들로 이루어진 하나의 단일한 논리적 DLL 또는 EXE 입니다 . 이때 오직 한 파일만 매니페스트를 담는데 그 매니페스트는 다중 파일 어셈블리를 구성하는 다른 파일들을 가리 키는 것 입니다 . 실행 코드를 담은 파일은 모듈이라 부르며 형식 메타 데이터와 MSIL 코드를 코드를 포함 합니다 . 또한 실행 코드가 없는 리소스 파일 역시 다중 파일 어셈블리의 한 부분이 될 수 있습니다 .
자~ 이번에는 닷넷 어셈블리 작성 실습을 하도록 하겠습니다. Visual Studio .Net 2003에서 작업을 합니다. 비주얼 스튜디오를 실행 후 새프로젝트 --> C#, 클래스 라이브러리를 선택한 후 프로젝트 이름을 Shapes 라고 입력 하자.
using System;namespace Shapes{public class Circle{double radius;public Circle(){radius = 0;}public Circle(double radius){this.radius = radius;}public double Area(){return System.Math.PI * (radius * radius);}}public class Triangle{double Base;double Height;public Triangle(){Base = 0;Height = 0;}public Triangle(double Base, double Height){this.Base = Base;this.Height = Height;}public double Area(){return 0.5F * Base * Height;}}} |
빌드 --> 솔루션 빌드를 선택하여 Shapes Project 를 빌드 하자 . 만약 명령행 이라면 다음과 같이 합니다 .
csc /target:library shapes.cs
이제 shapes.dll 이 생겼을 것입니다 ..
어셈블리의 내용 보기
방금 만든 shapes.dll 의 내용을 보기로 하자 . 이것이 가능 한 것도 이전에 이야기 했던 어셈블리의 자기 서술적 특징 때문 입니다 . 어셈블리의 내용을 보기 위해 사용 할 도구는 .NET framework Intemidiate Language DisAssembler 줄여서 ildasm 으로 어셈블리의 내부 구조를 보는데 유익 합니다 . 우선 ildasm 을 VS 의 외부 도구에 추가해 보기로 하겠습니다 . 도구 a 외부도구를 선택하고 [ 추가 ] 버튼을 선택 한 후 [ 제목 ] 에 ildasm 을 입력 하고 [ 명령 ] 상자의 오른쪽에 있는 (…) 버튼을 클릭 합니다 . C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 의 ildasm 파일을 선택하고 [ 열기 ] 를 클릭 한 후 [ 확인 ] 을 클릭 하면 등록이 완료 되는 것 입니다 .
Ildasm 이 추가 되었으면 도구 a ildasm 을 선택 합니다 . File Open 을 이용하여 shapes.dll 을 선택 해 보기로 하겠습니다 .
ildasm 의 메인 창에 어셈블리의 내용이 나타나는데 매니페스트와 Shape Class 가 보일 것 입니다 . Shapes 의 방패 아이콘은 네임스페이스를 의미하며 이것을 + 표시를 클릭하여 확장하면 Circle, Triangle 클래스가 나타날 겁니다 .
매니페스트 (Manifest)
매니페스트는 어셈블리 안의 각 파일 또는 모듈을 서술 합니다 . 특히 매니페스트는 이 어셈블리가 참조하는 외부 어셈블리도 서술 합니다 . 예를 들어 프로그램이 System.Data.dll 을 사용 한다면 그 사실이 매니페스트에도 반영이 되는 것 입니다 . 매니페스트는 또한 버전 번호도 유지하므로프로그램을 새 버전으로 업그레이드 하는데도 작업이 쉬워 집니다 . Shapes.dll 의 목록에서 MANIFEST 를 더블 클릭하면 아래와 같은 창이 나타날 겁니다 .
shapes.dll 의 MANIFEST 에는 두개의 .assembly 지시자 들과 하나의 .module 지시자가 있는 것이 보입니다 .
.assembly extern mscorlib : 이것은 mscorlib.dll 에 대한 외부 어셈블리 참조 입니다 . mscorlib.dll 은 .NET framework 의 거의 모든 기반 System 클래스를 정의 합니다 . .assembly Shapes 블록은 shapes 어셈블리 자체에 대한 선언이며 다음으로 나타나는 .module 의 경우 shapes.dll 은 하나의 파일만 가지므로 이처럼 하나의 .module 선언만 존재하는 것 입니다 . 이제 원본 파일을 수정하여 MANIFEST 내용을 확인 해 보도록 하겠습니다 .
using System.Drawing; 문을 추가하고 Circle 의 Area() 메소드 다음에 다음을 추가 합니다 .
public void Draw()
{
Pen p = new Pen(Color.Red);
}
이를 컴파일할 때 아마도 Drawing Namespace 가 없다고 할 것 입니다.. 프로젝트에서 참조추가를 선택 해서 System.Drawing.dll 을 선택해 주어야 합니다 .
수정된 파일을 다시 빌드 해 보기로 하겠습니다 . 이때 ildasm 은 종료 후 빌드를 해야 합니다 .
수정 후 ildasm 을 실행 시키면 다음과 같습니다 .
MANIFEST 의 내용은 다음과 같습니다 .
System.Drawing 에 대한 외부 어셈블리 참조가 추가 되었음을 알수 있습니다 .
오늘은 여기까지 하겟습니다. 이부분이 어렵다면 나중에 다시 보셔도 무방 하구요, 그러나 언제 봐도 봐야 하니까 반드시 실습을 따라해 보시기 바랍니다. 다음 시간에는 닷넷 어셈블리의 마지막으로 세부적인 특징에 대해 살펴 볼 겁니다.
수고하셨습니다.
질문 마니마니 해주세요~ (.Net Forum의 C#에 올려주세요)
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1806 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1312 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1059 | |
52 | [주말주간]C#, ASP.NET마스터 | 01-31 | 1220 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1014 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 915 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1224 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1076 | |
47 | [평일야간,주말주간]JAVA,Network&WEB&Framework | 01-03 | 1561 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1806 | |
45 | [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… | 12-19 | 1325 | |
44 | 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) | 12-14 | 1317 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1312 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1053 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1222 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1427 | |
39 | [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… | 12-01 | 932 |
댓글 없음:
댓글 쓰기