본문 바로가기
Coding/C,C++, Win32, MFC

All about Library

by 생각하는대로살자 2009. 7. 25.

역시나 뇌이뇬 블로그에 연재했던 글인데.............
스포일러를 말하자면, 쓰다 말았다 -_-;;;;;;;;;;;;

-----------------------------------------------------------------------

뭐 라이브러리에 대한 모든 것이라고 하기엔 좀 거창하고...^^;;;

 

라이브러리에 대한 간략한 설명과 만드는 방법에 대한 간단한 설명정도로 해두기로 하겠다.

(솔직히 라이브러리에 대해 다 적을 정성도 부족하다는..쿨럭;;;)

 

1. 라이브러리(Library)란???

라이브러리를 사전에서 찾아보면 '도서관'이라고 나온다.

도서관은 책을 보관하는..책들의 집합소이다. 도서관에서 나는 내가 원하는 지식이나 내용을 찾아보고 참조하거나 끌어다 쓸 수 있는 것이다.

이러한 맥락에서 보자면 컴퓨터 프로그래밍에서 라이브러리는 책이 아닌 (내가 자주 쓰거나 원하는)'함수'들의 집합이다.

함수들의 집합이긴 한데 내가 원하는 시점에서..(그 라이브러리가 존재하는 한) 어떤 상황(application)에서라도 내가 필요로하는 그 함수를 호출 할 수 있게 만드는 것이 바로 라이브러리이다.

 

2. 라이브러리의 종류.

자, 이제 라이브러리가 뭔지 대충 감이 오는가.이러한 라이브러리에도 종류가 있다.

- 정적 링크 라이브러리 (Static Link Library)

- 동적 링크 라이브러리 (Dynamic Link Library)

 

이 두 가지를 설명함에 앞서 잠깐 라이브러리가 내부적으로 어떻게 동작하는지 짚어 보고 넘어가보자.

 

라이브러리를 이용하는 프로젝트(application)가 하나 있다고 치자.

그리고 이 프로젝트에서 라이브러리에 내에 들어있는 함수를 하나 호출한다고 하자.

이 때 내부적으로는 위의 라이브러리 종류에 따라 상세 동작은 다르지만 기본적으로는 함수에 대한 '것'들을 복사하는 과정으로 이루어진다. '것'이라고 표현한 이유는 라이브러리 종류에 따라 좀 다르기 때문에 그렇다.

 

자, 그러면 위의 두 가지 라이브러리에 대해 간략히 알아보자면,

1) 정적 링크 라이브러리는 application에서 호출한 라이브러리 내에 들어있는 함수 코드가 .exe 파일 (즉 실행 파일)안으로 복사되서 동작을 하게 되며

2) 동적 링크 라이브러리는 .exe 파일을 '만드는' 시점에서 라이브러리 내에 들어 있는 그 호출 함수에 대한 정보만을 복사를 해 놓고 있다가 실제로 그 함수가 실행이 될 때 라이브러리가 메모리에 로드하는 방식으로 동작한다.  

 

즉 하나는 실행파일을 만들 때 아예 복사 해놓고 쓰는 것이고, 다른 하나는 실행파일을 만들때는 정보만 가져다 놓고 실행파일이 동작을 하다가 실제 그 함수를 호출 하는 시점에 메모리에 로드한다는 것이다.  ㅇㅋ?

 

 따라서 위의 말로 바꾸어 말하자면 DLL이란 결국 실행할 때 메모리에 로드되고 application에 링크되는 함수들의 집합이자 이것이 곧 Windows Application의 기본적인 모듈이 되는 셈이다.

 

자..그러면..이렇게 머리 아프고 복잡하게 할 거 없이 걍 함수 다 때려놓고 쓰면 되지 대체 이 골치하는 DLL을 왜 쓰느냐...라는 문제에 부딪히게 될 것이다. 이런 질문에 안 부딪히는 사람은 조용히 우측 상단의 X 버튼을 조용히 누르면 된다...ㅎㅎ

 

장점이 있으니 분명 사용할 것이다. 머리에 총맞지 않는 이상 불편한데 사용할 일이 없을테니..

그럼 장점을 알아보자

1) 프로젝트를 관리하기가 쉽다.

2) 실행시에 로드되고 링크 되므로 당근으로 실행속도가 빠르다.

3) 프로그램의 유지 보수가 쉽다. DLL을 이용해서 핵심코드나 추후 변하게 될 내용을 만든다면 DLL을 수정하고 재 컴파일 해서 DLL만 배포하면 되니까. 만일 DLL을 안 만들고 걍 다 all in one style로 다 때려 넣는다면 일일이 실행 파일 자체를 다 배포해야 하는 문제가 생긴다.

4) 메모리 절약이 가능하다. (이건 DLL의 특성을 생각해 보면 당연하다.)

5) 다양한 Language로 이루어진 application에 대한 지원도 가능하다.

 

그럼 단점은??? 뭐 거의 없다고 봐도 무방하다. 있다고 한다면..위의 장점에서도 힌트를 줬지만 DLL을 같이 배포해야 한다는 정도?? 뭐, DLL을 만들기 귀찮아 하는 플머가 있다면 만들기 귀찮다가..단점이 될 수도 있겠지만..위의 장점을 생각해 보면 귀차니즘을 빨리 걷어 버리는 쪽을 강추한다.

 

자..이제 DLL이 왜 필요한지 알았으니..이제는 만들고 사용할 일만 남았다.

이건 그 다음 편에 -_- (너무 길면 쓰는 입장에서도 스크롤의 압박이 심하므로...핑계는 ;;;;)