라이브러리는 프로그래밍에 사용할 수 있게 미리 만들어져 있는 함수나 변수들의 집합입니다.
따라서, 라이브러리를 사용하면 코드를 재사용하기 쉽고, 이미 구현되어 있는 기능을 쓸 수 있어 개발 시간을 단축 시킬 수 있다는 장점이 있습니다.
라이브러리는 링크(link)될 수 있도록 보통 컴파일된 형태의 목적 코드 형태로 존재하고, 미리 컴파일 되어 있어 컴파일 시간이 단축됩니다.
라이브러리는 크게 정적 라이브러리와 동적 라이브러리로 나뉩니다.
프로그램 컴파일 시 *링킹 단계에서 라이브러리가 제공하는 코드를 복사하여 실행파일에 넣는 방식의 라이브러리를 의미합니다.
Linking(링킹)
- 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고, 실행될 수 있는 한 개의 파일을 만드는 작업
- 하나의 프로그램에서 다른 프로그램의 라이브러리를 사용하는 일은 매우 빈번합니다. 이 경우 프로그램이 정상적으로 실행되기 위해 프로그램에서 다른 프로그램의 라이브러리를 가져와야 합니다.
- 링킹이란 컴파일 이후, 실행하기 이전에 작성한 프로그램이 사용하는 다른 프로그램의 라이브러리를 가져와 연결하는 과정을 의미합니다.
링커가 라이브러리를 복사하지 않고 해당 내용의 주소만 가지고 있다가, 실행 파일에서 라이브러리의 기능을 사용할 때 해당 주소를 통해 필요한 내용을 가져오는 방식의 라이브러리를 의미합니다.
DLL을 구현한 후 컴파일하면 두 개의 outfut 파일이 생성됩니다.
*.lib
파일과 *.dll
파일입니다.
*.lib
파일은 링크할 때 필요하고, *.dll
파일은 실행 할 때 필요합니다.
*.dll
파일은 Windows 운영체제에서만 사용할 수 있습니다.
ffi(Foreign Function Interface, 외부 함수 인터페이스)
ffi는 하나의 프로그래밍 언어로 작성된 프로그램이 다른 언어로 작성된 서비스를 이용할 수 있거나 그에 따른 함수를 호출할 수 있는 것을 의미합니다.
만약, JavaScript로 개발할 때 ffi가 python의
print()
함수를 사용할 수 있게 도와줍니다.ffi-napi
Electron은 Node 기반으로 프로그래밍을 할 수 있는 플랫폼입니다.
Node로 개발할 때 ffi-napi를 이용하여 백그라운드 앱에 접근할 수 있습니다.ffi-napi 모듈을 사용하여 이미 만들어져 있는 다른 동적 라이브러리(dll)를 Node에서 바로 로드하여 사용할 수 있습니다.
참고