언어/C++

동적 라이브러리와 정적 라이브러리

겜도리도리 2023. 5. 17. 00:19
반응형

개요

동적 라이브러리와 정적 라이브러리에 대해 비교한다.

 

라이브러리

라이브러리란, 프로그램을 만들 때 사용되는 클래스나 서브루틴들의 모임이다.

 

1. 정적 라이브러리(Static Library)

컴파일 타임에 소스 코드와 함께 라이브러리가 링크되는 방식이다.

일반적으로 .lib 확장자를 가지며 이 파일을 실행 바이너리에 포함한다.

라이브러리의 코드와 데이터가 실행 파일 내에 복제되기 때문에, 실행 파일의 크기가 증가한다.

실행 파일이 독립적으로 실행될 수 있으며, 실행 중에 외부 라이브러리에 대한 의존성이 없다.

코드의 재사용성이 낮아지고, 여러 프로그램에서 동일한 라이브러리를 사용하는 경우 중복된 코드가 발생할 수 있다.

컴파일 타임에 소스 코드와 함께 라이브러리가 링크되는 방식이다.

정적 라이브러리를 추가할 때에는 프로젝트 설정의 Link 옵션에서 라이브러리를 직접 추가하거나

#pragma comment(lib, "name.lib")와 같은 방식으로 추가할 수 있다.

 

2. 동적 라이브러리(Dynamic Library)

런타임에 실행 파일과 분리된 형태로 제공되는 라이브러리이다.

실행 파일과 독립적으로 개발되며, 실행 중에 동적으로 로드되어 사용된다.

실행 파일에는 라이브러리의 호출 정보만 포함되고, 실제 코드는 따로 라이브러리 파일에 존재한다.

라이브러리는 여러 프로그램에서 공유할 수 있으며, 라이브러리의 업데이트나 변경이 용이하다.

실행 파일의 크기가 작아지고, 메모리 절약 효과를 얻을 수 있다.

실행 파일은 라이브러리에 대한 의존성을 가지므로, 라이브러리가 없는 환경에서 실행할 수 없다.

 

정적 라이브러리는 컴파일 시점에 라이브러리 코드가 실행 파일에 포함되기 때문에, 빌드 시간이 늘어날 수 있고, 메모리 사용량이 증가하는 단점이 있다.

반면, 동적 라이브러리는 런타임에 필요한 라이브러리를 로드하므로 유연성과 메모리 효율성이 높아지지만, 라이브러리 파일 의존성이 높아지고, 로드 시간이 추가된다.

 

DLL은 다음과 같은 특징을 가진다.

1. 동적 링크: DLL은 실행 파일과 독립적으로 개발되며, 실행 파일이 실행될 때 필요한 DLL이 동적으로 링크됩니다. 이로써 여러 실행 파일이 같은 DLL을 공유하여 사용할 수 있으며, 코드의 중복을 줄일 수 있습니다.

2. 함수와 데이터 공유: DLL은 함수, 클래스, 변수 등의 코드와 데이터를 포함할 수 있습니다. 이를 통해 여러 프로젝트나 모듈에서 동일한 코드나 데이터를 공유할 수 있습니다.

3. 독립성과 유연성: DLL은 독립적으로 로드되어 실행 파일과 분리되어 있으므로, DLL의 업데이트나 변경 사항이 있을 때 실행 파일을 다시 빌드할 필요 없이 DLL만 교체하여 업데이트할 수 있습니다.

4. 런타임 로딩: C++에서 DLL은 런타임에 동적으로 로드될 수 있습니다. 따라서 프로그램 실행 중에 필요한 DLL을 동적으로 로드하고 함수를 호출할 수 있습니다. 이를 통해 플러그인 시스템이나 확장성 있는 애플리케이션을 개발할 수 있습니다.

반응형