C언어에서 라이브러리의 등장 배경 및 특징, 장점 등에 대해 알아보자
라이브러리(Library)란 프로그램을 개발할 때 컴퓨터 프로그램이 주로 사용하는 부품의 모음집을 말한다. 데이터 구조나 알고리즘, 문서, 미리 작성된 코드, 클래스, 값, 자료형, 입출력을 위한 함수 등을 포함하고 있으며 이러한 자료들은 변경될 가능성이 없기 때문에 라이브러리에 넣어서 관리할 수 있다. 프로그램에서 Library가 왜 필요한지 알아보도록 하자.
라이브러리
C 언어 프로그램은 함수 단위로 구성되는데, 이렇게 만들어진 함수들 중 내용이 거의 바뀌지 않는 함수들도 있다. 이런 함수들까지 소스 파일에 포함되면 코드가 길어져서 확인하기 힘들뿐더러 컴파일하는 시간도 오래 걸릴 것이다. 때문에 C 언어에서는 더욱 효과적으로 함수를 관리할 수 있도록 지속적으로 업데이트가 필요한 함수들만 소스 파일에 유지하고 나머지 함수들은 Library 파일에 넣어서 관리하게 만들었다.
라이브러리의 등장 배경
목적 파일(Object File)은 Source File을 컴파일하여 만들어지는데, 코드가 변경되지 않았으면 컴파일 과정 없이 전에 만들어 놓은 파일을 그대로 사용해 실행 파일을 만든다. 예를 들어 test.exe란 실행 프로그램이 test1.c, test2.c, test3.c 소스 파일로 구성되어 있고 test2.c 파일만 바뀐 경우에는 test2.c 파일만 컴파일해서 test2.obj 목적 파일을 새로 만들게 된다. 그리고 변경되지 않은 나머지 파일은 기존에 만들어 놓은 Object 파일을 그대로 사용해서 test.exe 실행 프로그램을 만든다.
하지만 Programing을 하다 보면 '소스 코드 전체를 저장'하거나 '소스 코드 전체를 컴파일'하는 기능을 사용하는 경우가 있다. 이 경우에는 프로그래머가 코드를 변경하지 않았어도 소스 파일 전체가 다시 컴파일된다. 만약 작업하는 Source Code의 개수가 많다면 작업의 효율성이 떨어지게 된다. 따라서 자신이 작업하는 Source File 목록 중에서 변경 가능성이 없는 파일들을 다른 곳에 보관해 두고, Source 파일 대신 Object 파일을 소스 목록에 포함시켜 작업하면 효율성을 높일 수 있다.
예를 들어 test3.c의 Source Code가 변경될 가능성이 없다면 프로그래머가 직접 Source 파일 목록에서 test3.c를 제외하고 test3.obj Object 파일을 넣어서 사용한다는 뜻이다. test3.c 대신에 test3.obj를 사용하면 '소스 전체 저장' 또는 '소스 전체 컴파일' 같은 기능을 사용한다 하더라도 test.obj는 Source File이 아니기 때문에 Compile되지 않고 링크할 때만 사용된다.
그런데 Object File에는 치명적인 단점이 있다. Object File에 포함되어 있는 Function의 내용이 실제 사용 여부와 상관없이 모두 실행 파일에 포함된다는 것이다. 예를 들어 test3.c 파일에 함수가 10개 있다면 이 Source File을 Compile해서 만들어진 test3.obj File에도 함수 10개의 기계어 코드가 있다. test3.obj에 있는 함수 10개 중 1개만 사용하더라도 실행 파일(test.exe)이 만들어질 때는 test3.obj에 있는 함수 10개의 내용이 모두 포함되어 버린다. 때문에 C 언어는 이러한 비효율적인 상황을 개선하기 위해 '라이브러리(Library)'를 제공한다.
라이브러리는 '실제 사용된 내용'만 File에 포함한다는 특징이 있다
라이브러리 파일(*.lib)은 자신이 가지고 있는 Function들 중에서 실제로 다른 Source File에서 사용한 Function의 기계어만 분리할 수 있도록 Object 파일을 재구성한 것이다. 그래서 보통 Library File은 Object 파일이 변환되어 만들어진다. 이렇게 만들어진 Library 파일을 프로그래머가 Object File 대신에 Source 목록에 넣어 두면 링크할 때 실제로 사용되는 Function들만 실행 파일에 포함시키게 된다. 즉 Library File에 10개의 Function 코드가 있어도 프로그램에서 그중 1개만 사용한다면 해당 Function의 Code만 실행 파일에 포함이 된다. 때문에 훨씬 효율적으로 프로그램을 실행할 수 있다.
라이브러리 파일의 또 다른 장점
Object File과 라이브러리 파일(Library File)은 이미 Compile된 File이기 때문에 기계어로 변환된 상태라 Source Code를 볼 수 없다. 따라서 자신이 만든 Source Code를 다른 사람에게 공개하지 않고 함수들을 사용하려면 고려해 볼만한 기술이다. Object File이나 라이브러리 파일(Library File)로 Source Code를 구성하면 원하는 함수를 사용하면서도 Source Code는 공개되지 않는 장점이 있다.