DLL은 서로 다른 프로그램이 하나의 파일을 공유할 목적으로, 1983년 Microsoft의 연구원 John Macley에 의해 설계되었습니다. DLL은 프로그램 실행시 연결되는 라이브러리로 함수와 리소스로 구성된 이진(Binary)파일이죠. 우리가 사용하는 FileOpen 다이얼로그나 Font 다이얼로그 같은 공통 다이얼로그도 commdlg.dll 파일에 정의되어 있으며 대부분의 응용 프로그램이 공유하면서 사용합니다.
만약에 이러한 기능을 각각의 프로그램에서 따로 구현한다면 코드와 리소스의 중복으로 메모리 낭비를 초래할 겁니다. 따라서 일반화시킬 수 있는 공통적인 기능을 DLL로 구현한다면 코드의 재사용성을 높이고, 리소스의 소모를 줄일 수도 있게 됩니다.
2. DLL을 만들어낸 목적
일반사용자가 사용하는 하드디스크와 메모리는 몇년 전에 비해 배로 증가했지만 여전히 모자랍니다. 그 이유는 프로그램이 버전업 될 때마다 사용자 구미에 맞는 기능을 추가하다 보니 실행 파일의 증대는 물론 많은 양의 리소스를 요구하기 때문이지요. 이와 같이 점점 비대해지는 실행파일의 크기나 리소스의 문제를 해결하기 위한 대안이 바로 DLL입니다.
3. DLL의 장점
1) 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약됩니다. 정적으로 링크된 라이브러리의 경우 각 프로그램마다 라이브러리 코드를 별도로 가지고 있기 때문에 이중 삼중으로 메모리를 낭비하게 됩니다. DLL을 사용하는 프로그램은 자신의 고유 코드만 가지고 있으며 DLL은 딱 한번만 읽어와 여러 프로그램이 공유하므로 메모리 절약 효과가 큽니다.
2) DLL을 사용하는 프로그램은 크기가 작습니다. 정적 링크를 사용하는 경우 실행파일에 라이브러리가 모두 포함되므로 실행파일이 커지게 됩니다. 프로그램이 커진다는 것은 여러 가지 문제를 야기시키는데 일단은 하드디스크의 용량을 많이 소모하게 되고 프로그램을 읽어오는 속도도 느려지게 됩니다. DLL은 프로그램의 크기도 작을 뿐만 아니라 한번 메모리에 읽어온 DLL은 다시 읽지 않고 실행파일만 읽어오기 때문에 로딩속도도 빠릅니다.
3) DLL을 교체하여 프로그램의 성능을 향상시키기 쉽습니다. DLL과 이 DLL을 사용하는 클라이언트 프로그램은 논리적으로 연결되기는 하지만 독립적인 프로그램이므로 클라이언트 프로그램은 그대로 사용하고 DLL만 교체해 주면 프로그램의 성능도 같이 향상되는 결과를 가져오게 됩니다.
4) 리소스의 교체가 가능합니다. DLL에는 함수뿐만 아니라 리소스가 같이 포함될 수 있는데, 상황에 따라 사용해야 하는 리소스가 다르다면 이 리소스를 DLL로 분리해 두고, 그때 그때 상황에 따라 다른 DLL을 읽어와 사용할 수 있죠. 다국어 버전을 지원하는 프로그램이 그 좋은 예가 됩니다. 언어뿐만 아니라 색상이나 화면 해상도에 따라 가장 적절한 리소스를 사용하도록 하고 싶을 때도 DLL을 사용할 수 있습니다.
5) 디버깅이 용이해집니다. 실행파일에 포함되는 코드의 양이 적어지므로 당연히 말썽이 되는 코드의 양도 적어지고 버그가 숨어있는 범위가 좁아지므로 디버깅을 효율적으로 할 수 있는 것은 당연합니다. 이러한 장점은 사용하는 DLL에 버그가 없다는 확신이 있을 때 뿐이며, 만약 DLL에 버그가 있다면 이때는 정말 잡기 힘든, 때로는 수정 불가능한 버그가 되는 단점이 되기도 합니다.
6) 혼합 프로그래밍이 가능해집니다. 물론 여러 가지 언어를 사용하여 프로그램을 개발하는 것은 DLL이 아니라도 가능하지만 DLL을 사용하면 어떤 개발 툴과도 접속할 수 있습니다.
7) 프로그램이 모듈화됩니다. 큰 프로그램을 개발할 때 DLL을 사용하면 프로그램이 DLL단위로 모듈화되기 때문에 각각을 독립적으로 개발할 수 있습니다. 따라서 애플리케이션의 특정부분이 업그레이드 되었을 때는 해당부분에 대한 DLL파일만 새로 설치하면 되죠.
Dynamic Link Library (DLL)
1. DLL이란?
DLL은 서로 다른 프로그램이 하나의 파일을 공유할 목적으로, 1983년 Microsoft의 연구원 John Macley에 의해 설계되었습니다. DLL은 프로그램 실행시 연결되는 라이브러리로 함수와 리소스로 구성된 이진(Binary)파일이죠. 우리가 사용하는 FileOpen 다이얼로그나 Font 다이얼로그 같은 공통 다이얼로그도 commdlg.dll 파일에 정의되어 있으며 대부분의 응용 프로그램이 공유하면서 사용합니다.
만약에 이러한 기능을 각각의 프로그램에서 따로 구현한다면 코드와 리소스의 중복으로 메모리 낭비를 초래할 겁니다. 따라서 일반화시킬 수 있는 공통적인 기능을 DLL로 구현한다면 코드의 재사용성을 높이고, 리소스의 소모를 줄일 수도 있게 됩니다.
2. DLL을 만들어낸 목적
일반사용자가 사용하는 하드디스크와 메모리는 몇년 전에 비해 배로 증가했지만 여전히 모자랍니다. 그 이유는 프로그램이 버전업 될 때마다 사용자 구미에 맞는 기능을 추가하다 보니 실행 파일의 증대는 물론 많은 양의 리소스를 요구하기 때문이지요. 이와 같이 점점 비대해지는 실행파일의 크기나 리소스의 문제를 해결하기 위한 대안이 바로 DLL입니다.
3. DLL의 장점
1) 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약됩니다. 정적으로 링크된 라이브러리의 경우 각 프로그램마다 라이브러리 코드를 별도로 가지고 있기 때문에 이중 삼중으로 메모리를 낭비하게 됩니다. DLL을 사용하는 프로그램은 자신의 고유 코드만 가지고 있으며 DLL은 딱 한번만 읽어와 여러 프로그램이 공유하므로 메모리 절약 효과가 큽니다.
2) DLL을 사용하는 프로그램은 크기가 작습니다. 정적 링크를 사용하는 경우 실행파일에 라이브러리가 모두 포함되므로 실행파일이 커지게 됩니다. 프로그램이 커진다는 것은 여러 가지 문제를 야기시키는데 일단은 하드디스크의 용량을 많이 소모하게 되고 프로그램을 읽어오는 속도도 느려지게 됩니다. DLL은 프로그램의 크기도 작을 뿐만 아니라 한번 메모리에 읽어온 DLL은 다시 읽지 않고 실행파일만 읽어오기 때문에 로딩속도도 빠릅니다.
3) DLL을 교체하여 프로그램의 성능을 향상시키기 쉽습니다. DLL과 이 DLL을 사용하는 클라이언트 프로그램은 논리적으로 연결되기는 하지만 독립적인 프로그램이므로 클라이언트 프로그램은 그대로 사용하고 DLL만 교체해 주면 프로그램의 성능도 같이 향상되는 결과를 가져오게 됩니다.
4) 리소스의 교체가 가능합니다. DLL에는 함수뿐만 아니라 리소스가 같이 포함될 수 있는데, 상황에 따라 사용해야 하는 리소스가 다르다면 이 리소스를 DLL로 분리해 두고, 그때 그때 상황에 따라 다른 DLL을 읽어와 사용할 수 있죠. 다국어 버전을 지원하는 프로그램이 그 좋은 예가 됩니다. 언어뿐만 아니라 색상이나 화면 해상도에 따라 가장 적절한 리소스를 사용하도록 하고 싶을 때도 DLL을 사용할 수 있습니다.
5) 디버깅이 용이해집니다. 실행파일에 포함되는 코드의 양이 적어지므로 당연히 말썽이 되는 코드의 양도 적어지고 버그가 숨어있는 범위가 좁아지므로 디버깅을 효율적으로 할 수 있는 것은 당연합니다. 이러한 장점은 사용하는 DLL에 버그가 없다는 확신이 있을 때 뿐이며, 만약 DLL에 버그가 있다면 이때는 정말 잡기 힘든, 때로는 수정 불가능한 버그가 되는 단점이 되기도 합니다.
6) 혼합 프로그래밍이 가능해집니다. 물론 여러 가지 언어를 사용하여 프로그램을 개발하는 것은 DLL이 아니라도 가능하지만 DLL을 사용하면 어떤 개발 툴과도 접속할 수 있습니다.
7) 프로그램이 모듈화됩니다. 큰 프로그램을 개발할 때 DLL을 사용하면 프로그램이 DLL단위로 모듈화되기 때문에 각각을 독립적으로 개발할 수 있습니다. 따라서 애플리케이션의 특정부분이 업그레이드 되었을 때는 해당부분에 대한 DLL파일만 새로 설치하면 되죠.
자료출처 : http://myku.hihome.com/doc/mfc/dll1.html
저는 3), 7)항목이 맘에 드네요.