라이브러리란? 정적 동적 공유 차이

도서관이라는 뜻을 가진 라이브러리(Library)는 개발 과정에서 필요한 기능들을 모아놓은 공간으로 이해할 수 있습니다. 라이브러리는 재사용 가능한 코드 조각 모음입니다. 개발자는 만들어져 있는 코드 조각을 활용함으로써 효율성을 극대화합니다.

동적 라이브러리, 정적 라이브러리 차이

라이브러리는 사용 형태에 따라 동적(dynamic) 라이브러리와, 정적(static) 라이브러리로 나뉩니다. 차이를 결정하는 가장 큰 특징은 프로그램과의 연결 시점(컴파일 시 or 런타임 시)과 공유 가능 여부라고 볼 수 있습니다.

프로그램 연결 시점과 공유 가능 여부

정적 라이브러리는 컴파일 시 응용 프로그램에 속하게 됩니다. 실행 파일에 함께 빌드됩니다. 그렇기 때문에 예를 들어, 만약 A 프로그램에도 abc라이브러리가 사용되고, B 프로그램에도 abc라이브러리가 사용된다면 A와 B 프로그램에 각각 빌드되어야 합니다.

 

동적 라이브러리는 실행 파일 외부에 별도 파일로 존재하며, 런타임 시 연결됩니다. 라이브러리의 기능은 프로그램 자체에 속하지 않고 런타임 시 메모리에 로드되어 구현됩니다. 예를 들어, 윈도우 OS의 시스템 폴더에는 수많은 dll 파일이 있습니다. 만약 abc.dll이라는 모듈이 A프로그램에도 사용되고 B프로그램에도 사용된다면 두 프로그램은 하나의 abc.dll을 공유해서 사용할 수 있습니다. 이런 특성 때문에 동적 라이브러리는 공유 라이브러리라고도 부릅니다. 참고로 비슷한 역할을 리눅스에선 so 파일이 합니다.

그 외 차이들

위에서 언급한 특성에 따라 정적 라이브러리와 동적 라이브러리는 여러 차이가 발생합니다.

 

정적 라이브러리는 코드가 실행 파일에 잠겨 있기 때문에 수정하기 위해서는 컴파일을 다시 해야 합니다. 손상 가능성이 적습니다. 함수 호출 속도가 빠릅니다. 호환성 문제가 없습니다.

 

동적 라이브러리는 별도의 파일로 존재하기 때문에 다시 컴파일할 필요 없이 수정이 가능합니다. 버전별 관리에 용이합니다. 손상될 가능성이 높습니다. 실행 파일 외부에서 함수를 호출하기 때문에 상대적으로 처리 속도가 느립니다. 호환 가능한 라이브러리가 있어야 합니다.

반응형

댓글

Designed by JB FACTORY