라이브러리 (Library)
(Dynamic Link Library을 알아보기 전 라이브러리가 무엇인지 먼저 집고 넘어가자.)
▶ 소프트웨어 개발에서 자주 쓰고 기초적인 함수들을 중복 개발하는 것을 피하기 위해
표준화된 함수 및 데이터 타입을 만들어서 모아 놓은 것.
즉, 자주 사용되는 표준적인 함수를 매번 직접 작성해서 사용하는 것은 지나치게 시간 소모적이므로 표준화할 수 있는 함수를 미리 만들어서 모아 놓은 것.
▶ 라이브러리를 한 번 구축해 놓기만 하면 다시 만들 필요없이 불러서 사용할 수 있으므로 개발 속도도 빨라지고 신뢰성도 확보할 수 있다.
▶ 이런 라이브러리는 언제 메인 프로그램에 연결하느냐에 따라서 Static Link와 Dynamic Link로 나뉘며, DLL은 이 중 후자를 뜻한다.
스태틱 링크(Static Link Library)
- 정적 링크라고 하며 컴파일 시점에 라이브러리가 링커에 의해 연결되어 실행 파일의 일부분이 된다.
DLL(Dynamic Link Library)
- 동적 링크라고 하며 실행 파일에서 해당 라이브러리의 기능을 사용 시에만, 라이브러리 파일을 참조하여(혹은 다운로드받아) 기능을 호출한다.
- 정적 링크와는 다르게 컴파일 시점에 실행 파일에 함수를 복사하지 않고, 함수의 위치정보만 갖고 그 함수를 호출할 수 있게 한다.
개발자들은 좋아하지만[1], 유저들은 겁나게 싫어한다.(...) 아무래도 로딩 시간이 있기 때문에 그런 듯. 일부 프로그램은 dll이 없어서 에러를 내뱉기도 한다 NT 6.x 이상의 환경에서 Direct X 9 라이브러리 문제로 에러를 띄운다).
1. DLL의 이점
1) 더 적은 리소스 사용
- 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약된다.
- 사용되는 디스크 공간을 줄일 수 있다.
(정적링크를 사용하는 경우 실행 파일에 라이브러리의 함수가 모두 포함되어 실행파일이 커지지만 DLL을 사용하는 프로그램은 크기가 작다.)
- 운영 체제와 프로그램이 더 빠르게 로드 및 실행되며 컴퓨터에서 디스크 공간을 더 적게 차지한다.
2) 모듈식 아키텍처 활용
- DLL을 사용하면 모듈식 프로그램을 효율적으로 개발할 수 있다.
여러 언어 버전이 필요한 큰 프로그램이나 모듈식 아키텍처가 필요한 프로그램을 개발할 수 있다.
3) 손쉬운 배포와 설치
- DLL 내의 함수를 업데이트하거나 수정해야 하는 경우 DLL을 배포하고 설치할 때 프로그램을 DLL과 다시 연결하지 않아도 된다.
- 여러 프로그램이 같은 DLL을 사용하는 경우에는 모든 프로그램에 업데이트나 수정 내용이 적용된다.
4) 프로그래머들의 분담 작업이 용이하며 재사용성도 뛰어남.
또한 코드의 양이 적어지므로 디버깅도 용이해진다.
2. DLL 사용시 유의 점
- 프로그램이 DLL을 사용할 때는 종속성이라는 문제로 인해 프로그램이 실행되지 않을 수 있다.
(특히 system32 폴더 내의 DLL 파일은 조심 하자.)
- 가끔 어떤 프로그램 사용시 특정 DLL 파일을 어느 위치에 저장시키라고 하는 경우가 있는데 해당 프로그램을 신뢰할 수 있는지 확인해 보아야 한다.
해로운 DLL 파일일 수 있기 때문이다.
- DLL 파일을 함부로 이동시키면 프로그램이 정상적으로 작동하지 않을 수 있다.
※DLL 종속성 이란?
프로그램이나 DLL이 다른 DLL의 DLL 함수를 사용하는 경우 종속성이 작성된다.
이런 경우 해당 프로그램은 더 이상 자체 포함 프로그램이 아니며, 종속성이 손상되면 프로그램에 문제가 발생할 수 있다.
예를 들어 다음 작업 중 하나를 수행하면 프로그램이 실행되지 않을 수 있다.
1) 종속 DLL을 새 버전으로 업그레이드하는 경우
2) 종속 DLL을 수정하는 경우
3) 종속 DLL을 이전 버전으로 덮어쓰는 경우
4) 종속 DLL을 컴퓨터에서 제거하는 경우
이러한 작업을 대개 DLL 충돌이라고 하고, 이전 버전과의 호환성이 적용되지 않으면 프로그램이 정상적으로 실행되지 않을 수 있다.
출처: https://goddaehee.tistory.com/185 [갓대희의 작은공간]
'개발자 > Programming' 카테고리의 다른 글
VS CODE 단축키(유용한 거 생길 때마다 업데이트) (0) | 2020.04.07 |
---|---|
줄 끝을 정규화시키시겠습니까? 경고창에 대해 (0) | 2020.04.01 |
Visual Studio 빌드 관련 폴더 및 파일 정리 (0) | 2020.03.30 |
CodeMaid - Visual Studio (Plugin) 애드온 추천 (0) | 2020.03.22 |
VSCode 단축키 5분 정리 (0) | 2020.03.17 |