검수요청.png검수요청.png

라이브러리

해시넷
이동: 둘러보기, 검색

라이브러리(library)란 다른 프로그램에 링크되어 특정한 기능을 수행하도록 작성된 하나의 프로그램 코드 파일이다. 모듈(module) 또는 컴포넌트(component)보다 기능이 단순하고, 파일 사이즈가 작다.

개요

소스코드를 작성하다보면 자주 사용되는 로직이 있다. 그럼 이 로직을 재사용할 수 있다면 좀 더 효율적인 개발이 가능한데, 재사용이 가능하도록 만든 로직을 라이브러리(library)라고 생각하면 된다. 라이브러리는 자기 자신이 사용하기위해 직접 만들 수 있고, 불특정 다수가 사용할 수 있도록 공개할 수 있다. 라이브러리를 사용하면 필요한 로직을 직접 구현할 필요가 없기 때문에 개발기간을 단축할 수 있을 뿐더러 라이브러리에서 제공하는 API를 호출하는 것을 통해 원하는 기능을 사용할 수 있게된다. [1]

목적

라이브러리(library)는 소스코드 재사용을 위해 조직화된 초기 방법 중의 하나이며 많은 다른 프로그램들에서 사용할 수 있도록 운영체계나 소프트웨어 개발 환경 제공자들에 의해 제공되는 경우가 많다. 라이브러리는 사용자의 프로그램과 링크되어 실행이 가능한 완전한 프로그램을 이룬다. 또한 라이브러리 내에 있는 루틴들은 범용적으로 사용 가능하며, 3차원 애니메이션 그래픽과 같은 특별한 용도의 함수로도 설계될 수 있다. [2]

구분

정적 라이브러리(static library)

정적 라이브러리(static library)는 프로그램 빌드시에 라이브러리가 제공하는 코드를 실행 파일에 넣는 방식의 라이브러리이다. 컴파일의 링킹 단계에서 실행파일에 결합되는데, 라이브러리(.lib파일)를 실행 바이너리에 포함시킨다는 의미이다. 즉, 라이브러리의 동작 코드가 이를 사용하는 실행 바이너리 속에 포함되기 때문에 별도의 추가 작업없이 독립적으로 라이브러리 함수들을 사용할 수 있다. 정적 라이브러리를 사용하게 되면 컴파일시 링커가 프로그램이 필요한 부분을 라이브러리에서 찾아 실행파일에 바로 복사한다. 실행파일에 모두 포함되기 때문에 실행시에 라이브러리가 필요없다. [3]

장단점

  • 장점

정적 라이브러리는 첫째, 동적 라이브러리에 비해 속도가 빠르다. 런타임시에 외부를 참조할 필요가 없기 때문에 속도가 향상되어 성능도 좋아진다. 두번째, 라이브러리 생성이 간단하여 복잡하지않다. 세번째, 필요한 라이브러리를 프로그램 내에 적재하기 때문에 이식성이 좋다. 컴파일시 해당 정적 라이브러리의 내용이 실행 바이너리 안에 포함되어있기 때문에 함께 배포하지 않아도된다. [3] 네번째, 완성된 애플리케이션을 안정적으로 사용할 수 있다. 또한 시스템 환경이 변하더라도 애플리케이션에는 어떠한 영향도 미치지않는다. [4]

  • 단점

정적 라이브러리의 단점으로는 첫째, 메모리가 낭비될 수 있다. 같은 코드를 가진 여러 프로그램을 실행할 경우에 소스코드가 중복되기 때문에 그만큼의 하드디스크 공간도 차지하고, 메모리도 더 많이 차지하게 되어 메모리를 낭비하게 된다. [4] 두번째, 라이브러리에 변경사항이 생길 경우, 변경된 라이브러리의 내용만 재배포가 되지않는다. 즉, 변경된 내용의 라이브러리가 적용된 프로그램을 다시 재배포해야한다. [3]

동적 라이브러리(dynamic library)

동적 라이브러리(dynamic library)는 소프트웨어의 일종으로, 동적 링크를 사용한 라이브러리이다. 여러 프로그램이 공통적으로 필요로 하는 기능들을 프로그램과 분리하여 필요할 때에만 불러내어 쓸 수 있게 만들어 놓은 라이브러리를 의미한다. 마이크로소프트 윈도우에서는 동적 링크 라이브러리라고 해서 확장자가 DLL인 파일로 제공되고 있으며, 리눅스에선 /lib 밑의 .so 파일 등으로 구현된다. 개인이 자유 소프트웨어 등을 작성할 때에 만들기 쉽게 하기위해 작성하여 무료로 제공되는 것도 있다. [5]

장단점

  • 장점

동적 라이브러리는 첫째, 메모리를 절약할 수 있으며, 스와핑을 줄여준다. 여러 프로세스가 메모리에 있는 하나의 DLL 복사본을 공유하여 하나의 DLL을 동시에 사용할 수 있다. 두번째, 디스크 공간도 절약할 수 있다. 여러 응용 프로그램이 디스크에 있는 하나의 DLL 복사본을 공유할 수 있다. 세번째, DLL을 쉽게 업그레이드할 수 있다. DLL의 함수가 변경되어도 함수의 인수 및 반환 값이 변경되지않았다면 그 함수를 사용하는 응용 프로그램은 다시 컴파일하거나 링크를 할 필요가 업다. 네번째, 출시 후에 지원이 가능하다. 예를들면, 응용 프로그램을 출시할 때 사용할 수 없었던 디스플레이 기능을 지원하도록 디스플레이 드라이버 DLL을 수정할 수 있다. 다섯번째, 언어 형식이 다른 여러 프로그램을 지원한다. 서로 다른 프로그래밍 언어로 작성된 프로그램인 경우에도 함수의 호출 규칙을 따르기만 한다면 여러 프로그램에서 동일한 DLL 함수를 호출할 수 있다. 이 경우 각 프로그램과 DLL 함수는 여러 부분에서 호환될 수 있어야 한다. [2]

  • 단점

동적 라이브러리의 단점으로는 첫째, 외부 의존도가 발생하기 때문에 이식성이 어렵다. 둘째, 성능저하로 인해 속도가 느려질수있다. 동적 라이브러리는 정적 라이브러리에 비해 사용이 복잡하기 때문에 공유 라이브러리를 메모리에 올리려면 해당 라이브러리를 찾고 올리는데까지 시간이 걸린다. 이로인해 성능저하가 발생하게 되며 속도가 현저히 느려진다. [2] 세번째, 실행파일을 배포할 경우 라이브러리를 함께 배포해야한다. 컴파일시 해당 동적 라이브러리의 내용이 실행 파일안에 포함되어 있지않거나 메이저 버전이 달라 프로그램이 작동되지않는 경우가 있기 때문이다. [6] [7]

각주

  1. 라이브러리〉, 《프로그래밍 언어(오픈 튜토리얼)》, 2013-05-27
  2. 2.0 2.1 2.2 동적라이브러리란?〉, 《개인사이트》, 2016-07-13
  3. 3.0 3.1 3.2 동적 라이브러리와 정적 라이브러리〉, 《개인사이트》, 2018-10-06
  4. 4.0 4.1 정적 라이브러리와 동적 라이브러리의 비교(lib와 dll의 장단점)〉, 《개인사이트》, 2013-05-08
  5. 동적라이브러리〉, 《위키백과》, 2020-04-02
  6. Static Link Library와 Dynamic Link Library의 장단점〉, 《개인블로그》, 2011-01-07
  7. 동적(공유) 라이브러리와 정적 라이브러리〉, 《개인블로그》, 2013-08-09

같이 보기


  검수요청.png검수요청.png 이 라이브러리 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.