라이브러리 (컴퓨팅)

라이브러리()는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다. OS/360 및 이후 세대에서는 파티션 데이터 세트로 부른다.

역사 
라이브러리와 유사한 최초의 프로그래밍 개념들은 프로그램 구현체로부터 데이터를 분리하기 위한 의도였다. JOVIAL은 1959년 "COMPOOL" (Communication Pool)이라는 개념을 통해 주목을 끌었으나 이는 대형 시스템 SAGE 소프트웨어로부터 개념을 가져온 것이다. 관심사 분리와 정보 감춤이라는 컴퓨터 과학 원칙을 따라, Comm Pool의 목적은 중점이 되는 데이터 기술을 제공함으로써 수많은 프로그램들 간에 시스템 데이터 공유를 허가하는 것이었다.

코볼 또한 1959년에 라이브러리 시스템을 위한 원시적인 기능을 포함했으나, Jean Sammet은 회상을 통해 이를 "적절하지 않은 라이브러리 기능"으로 정의하였다.

현대의 라이브러리 개념은 주로 포트란의 서브프로그램 이노베이션의 형태로 나타났다. 포트란의 서브프로그램들은 서로 개별적으로 컴파일할 수 있지만 컴파일러에 링커가 존재하지 않았다. 그러므로 포트란-90의 모듈 도입 이전까지는 포트란 서브 프로그램들 사이에 자료형 검사가 불가능했다.

마침내, 이 개념의 사학자들은 영향력 있는 시뮬라 67을 기억해냈다. 시뮬라는 최초의 객체 지향 프로그래밍 언어로, 이 언어의 클래스가 자바, C++, C 샤프에 쓰인 현대의 개념과 매우 근접했다. 시뮬라의 클래스 개념은 또한 에이다의 패키지, 모듈라-2의 모듈의 조상이었다. 원래 1965년에 개발되었음에도 시뮬라 클래스들은 라이브러리 파일에 포함되어 컴파일 타임에 추가될 수 있었다.

라이브러리 링크 

라이브러리는 링크 또는 바인드 작업에 중요하며, 라이브러리 모듈에 대한 링크나 심볼이라는 참조를 해결한다. 링크 과정은 일반적으로 링커나 바인더 프로그램을 이용하여 자동으로 수행되며, 주어진 순서대로 라이브러리 및 다른 모듈의 집합을 검색한다. 주어진 라이브러리 집합에서 링크 대상을 여러 번 발견하는 것은 오류로 간주되지 않는 것이 일반적이다. 링크는 실행 파일이 만들어질 때나 프로그램이 런타임에 사용될 때마다 수행된다.

구분

정적 라이브러리 

정적 라이브러리는 컴파일러가 소스 파일을 컴파일할 때 참조되는 프로그램 모듈이다. 즉, 정적 라이브러리(statically-linked library)는 루틴(routine) 외부 함수와 변수들의 집합으로 컴파일러, 링커, 바인더 등에 의해 목표된 애플리케이션으로 복사되어 오브젝트 파일과 독립적으로 실행할 수 있는 실행 파일을 생성하는데에 사용된다. 윈도의 .LIB파일과 같이 .a의 확장자를 갖고 있다.

동적 라이브러리 

동적 라이브러리는 프로그램 수행 도중 해당 모듈이 필요할 때 불러쓰는 프로그램 모듈이다. 윈도우에서는 주로 DLL 확장자를 가지며, 리눅스에서는 주로 SO 확장자를 가진다.

공유 라이브러리 
공유 라이브러리 또는 공유 오브젝트는 실행 파일, 더 나아가 공유 오브젝트 파일에 의해 공유될 목적으로 만들어진 파일이다.

같이 보기 

 정적 라이브러리
 동적 라이브러리
 목적 파일
 런타임 라이브러리
 C 표준 라이브러리
 플러그인

주해

각주

외부 링크 
 라이브러리의 사용 

 
운영체제 기술