본문 바로가기
Delphi Tip/파일

DLL(Dynamic-link library)란 (2)

by MonoSoft 2023. 6. 22.
728x90
반응형

DLL(Dynamic-link library)란 (2)

728x90

 

 

DLL은 Dynamic-link library의 약자로 한마디로 표현하자면

동적으로 연결되는 램상주 라이브러리이다.

 

Windows 환경하의 프로그래밍에서 DLL은 단순한

라이브 러리 이상의 의미를 가진다.

 

우리가 작성한 어플리케이션은 DLL의 징검다리를 뛰 어다닌다.

 

Windows의 많은 부분이 DLL로 구성된 탓이다.

 

Windows의 커널, 그래픽 인터페이스, 디바이스 드라이버등은

모두 DLL로 구성되어 있다.

 

실제로 Windows 하의 프로그래밍 환경에서

DLL과 완전히 별개인 어플리케이션은 존재할 수 없다.

 

우리가 Windows API가 DLL을 호출하는 것은 당연한 것이라 치고,

VCL 역시 DLL 위에서 구성된 것이다. 심지어 DLL이 깨어지거나 삭제되었을 때,

아예 Windows 자체가 동작하지 않는다

( 따라서 메모리에 적재된 DLL은 Windows하에서는 삭제할 수 없다)

 

DLL은 델파이에서의 unit 개념으로 파악하면 된다.

procedure와 function을 제공 한다는 의미에서 그렇다.

 

실제 델파이에서 DLL을 사용할 때는

unit과 비교해 선 언부의 차이만 있지 외형적 코드상

procedure와 function을 호출하는 방법은 동일하다.

 

선언부를 보지 않으면 그것이 DLL의 procedure나 function인지

unit의 procedure나 function인지 전혀 구분할 수 없다는 말이다.

 

하지만, 내부적으로 unit과 DLL은 크게 다르다.

우선 unit은 실행파일의 내부에 코드가 자리잡지만 DLL은

외부 파일로 존재하며 필요시

- 이미 메모리에 적재되지 않은 경우에만 메모리에 올려진다.

 

unit은 실행파일내에 코드로 구성되며 그 자체가 메모리에 복사되어 호출된다.

동일한 unit을 사용하는 두 개의 프로그램이 실행된다면

동일한 unit의 코드 두개가 메모리에 적재된다.

 

하지만 DLL은 단 하나의 복사본만 메모리에 적재되며

다수의 어플리케이션이 DLL 내부의 코드들을 '공유'해서 사용 한다.

DLL의 경우 어플리케이션이 실행되면서 DLL이 메모리에 적재되어 있는지를

파악한 후 없다면 메모리에 적재하고

그곳의 procedure나 function과 실행파일 내부의 접속점(Entry Point)에 연결한다.

실행파일에서는 이 EntryPoint를 호출 하여

DLL의 procedure나 function을 이용하는 것이다.

 

DLL은 코드의 공유라는 커다란 장점에도 불구하고

무시못할 단점 또한 가지고 있 다.

unit의 경우 형(Type), 상수, 변수, 오브젝트, procedure, function 어느것이나

다른 unit에서 사용할 수 있는 반면, DLL은 단지

procedure와 function만 외부에 전달할 수 있다.

 

형을 제외한 상수, 변수, 오브젝트등을 제공하는

function을 DLL 내부에 작성해 이 문제를 극복할 수 있으며,

형(Type)은 대부분 의 DLL을 이용하는 어플리케이션에서 처럼

동일한 구조의 형을 선언해서 사용하면 아무런 문제가 없다.

 

 

DLL의 가장큰 장점으로는 DLL의 설계 자체가

다중언어 프로그래밍이라는 개념을 바탕으로 하고 있다는 것이다.

 

즉, DLL은 어떤 언어로 작성하던지 상관없으며,

반대로 어떤 언어로 작성된 프로그램이나 DLL을

마음대로 호출해서 사용할 수 있다.

 

Windows 운영체제를 파일 시스템과 메모리 시스템, 디바이스등으로

간단히 생각 해 보면 이 것들을 억세스하는데는 반드시

윈도우에서 DLL로 제공하는 API를 이 용해야 한다.

 

3편 계속....

728x90
반응형

댓글