좀전에 포스팅한 글에 이어서. 두번째 입니다.

당연한 이야기 겠지만.
참조한 DLL로부터 클래스를 상속받을수도 있고, 상속후 메서드를 재정의 할수도 있슶니다.
한번 해보죠.

Client의 소스를 다음과 같이 수정해 볼께요.

namespace Client
{
    class IntCalculator2 : IntCalculator
    {
        public static void PrintMessage()
        {
            Console.WriteLine("요게 되는군요~ :)");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("5+5 = {0}", IntCalculator2.Add(5, 5));
            Console.WriteLine("5-5 = {0}", IntCalculator2.Sub(5, 5));
            IntCalculator2.PrintMessage();
        }
    }
}

IntCalculator를 상속받아서 메서드를 하나 추가를 헀어요.
Add와 Sub 메서드는 IntCalculator2에서도 잘 동작을 하는걸 확인할수 있을겁니다.

닷넷은 언어독립적 특성을 가지고 있어서 C#으로 만든 어셈블리를 VB에서도 사용할수 있습니다.
(하지만 제가 VB를 할줄 모르는군요. ㅎㅎ;;;)
by 피요히코~ 2009. 4. 29. 23:56
이번에는 DLL만들기에 도전해 보겠습니다.

간단하게
DLL은 클래스와 메서드를 제공하고, 실행중 연결되는 동적 연결 라이브러리 입니다. (Dynamic Linked Lybrary..맞나요? ㅋ)
실행파일과 내부 포멧은 같지만 진입점(Main같은녀석)이 없어서 혼자 실행은 안됩니다.
하지만 실행파일이나 다른 DLL에게 서비스를 제공하는 역할을 하죠
(때문에. 혹은 덕분에 여러명이 분담을 해서 여러 모듈을 만들고 통합해서 사용이 가능하겠죠)
DLL역시 형태만 다를뿐 어셈블리라는 면에서는 실행파일과 같습니다.

DLL, 실행파일 => 두개의 어셈블리로 구성된 프로그램을 만들어 볼께요.

먼저
파일 -> 새로만들기 -> 프로젝트 를 선택해서
템플릿에서 클래스 라이브러리를 선택합니다.
이름은 DLLTest로 할께요.

기본적으로 몇개의 using과 namespace가 있고.
기본으로 Class1이라고 코드가 만들어져 있지만.
Class는 지우고 새로 만들께요.
간단하게 덧셈과 뺄셈을 하는 메서드 두개를 정의했습니다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testDLL
{
    public class IntCalulator
    {
        public static int Add(int a, int b) { return a + b; }
        public static int Sub(int a, int b) { return a - b; }
    }
}

DLL이 외부로 공개할수 있는건
클래스, 구조체, 열거형, 인터페이스등인데 주로 클래스를 제공합니다.
C#은 완전 객체지향 언어이므로 메서드만 단독으로 제공할수는 없고
무조건 클래스를 통해서만 제공이 가능합니다.
(다 클래스 안에 때려 박아야겠죠. ㅠ)
꼭 필요한건 아니지만.
네임스페이스도 만들고. 클래스도 만들고
그 안에 Add와 Sub라는 메서드를 만들었습니다.

주의 할점은
외부로 공개할 클래스는 반드시 public이여야 한드는겁니다.(당연한소리죠)
(DLL내부에서만 쓰는 클래스라면 다르겠죠. (또 당연한... ))

이제 빌드를 하면 testDLL.dll이 만들어 집니다.

그럼 이제. 클라이언트 프로그램을 만들께요.
아예 다른 프로젝트를 만들어서 해볼께요.
파일 => 새로만들기 => 프로젝트 를 선택하고 콘솔응용프로그램을 만듭니다. 이름은 Client로 할께요.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using testDLL;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("5+5 = {0}", IntCalculator.Add(5, 5));
            Console.WriteLine("5-5 = {0}", IntCalculator.Sub(5,5));
        }
    }
}


이런 코드를 작성하고 나면
컴파일을 하고 자시고 할것도 없이
빨간줄이 쭉쭉 그어집니다.

testDLL을 using하긴 했지만.
이게 어디있는 놈인지. 진짜 있긴 한건지.
알수가 없으니 안되겠죠.

멍청한(--;;) 컴파일러에게 친절하게
testDLL이 어디 있는지를 가르쳐 줘야 합니다.
솔루션탐색기에서 참조란을 우클릭하고 참조추가를 한후
아까 만들어진 testDLL이 있는 위치를 찾아 추가를 해주면 되요.


그러면 빨간줄도 없어지고.
컴파일도 잘 됩니다.

testDLL은 참조추가를 해서 Client 프로젝트 디렉토리로 복사가 됐습니다.
client 프로젝트 폴더에서 찾아보면 다음과 같이 실제로 testDLL이 복사가 되어 있는걸 볼수 있어요.




 

by 피요히코~ 2009. 4. 29. 23:48
| 1 |