TIL
[CS] 다이나믹 라이브러리 vs 스태틱 라이브러리
Kim Roks
2025. 1. 8. 19:41
개요
Tuist의 버전 마이그레이션을 진행하며 Static Library와 Dynamic Libreary에 대한 설정을 따로 해줘야 하는 경우를 맞닥뜨렸습니다.
물론 평소 외부 의존성을 사용할때도 마주쳤던 상황인데 부끄럽게도..
’ 음? 다이내믹은 뭐지? 선택하니까 잘 안되네, 급하니까 일단 스태틱 써야지.’ 하고 넘어갔던 기억이 있습니다…
부끄러움은 뒤로 하고 오늘은 다이내믹 라이브러리와 스태틱라이브러리가 어떻게 다른지 알아보겠습니다!
Static Library (정적 라이브러리)
정의
- 컴파일 시점에 프로그램에 포함되는 라이브러리 입니다.
- 소스코드가 아닌 컴파일된 바이너리 형태로 제공됩니다.
- 컴파일 작업을 거쳐 기계어로 변환하는 과정이 컴파일, 그 과정에서 결과물로 생긴 파일을 바이너리 파일이라고 얘기합니다.
- 단, 여기서 Xcode Build System의 컴파일러 과정에서 어셈블리어를 거치는 것과는 관련이 없고, 정적 라이브러리는 바로 기계어 변환된 상태로 시작 파일에 포함되어 있다고 합니다.
- mac에서의 파일형식은. a입니다
- 윈도우에선 .lib이라고 하네요!
링크 방식
- 정적 라이브러리는 프로그램의 실행 파일에 직접 포함이 됩니다.
- 라이브러리의 코드가 실행파일에 복사되며, 프로그램 실행 시 추가적인 라이브러리가 필요하지 않습니다.
- 링크, 링크 방식이란 무엇인가? (링크)
장점
- 배포가 간편하다.
- 추가적인 라이브러리에 의존성을 가지지 않아, 배포가 간편합니다.
- 실행 속도가 빠르다.
- 실행 파일에 필요한 모든 코드가 포함되어 있으므로 별도의 파일을 로드하는 과정이 필요하지 않아 실행 속도가 빠릅니다.
단점
- 파일 크기가 증가합니다
- 바이너리 파일이 직접 포함되니, 실행 파일 크기가 자연스레 증가합니다.
- 업데이트의 어려움
- 라이브러리 코드의 수정이 필요한 경우, 프로그램을 다시 컴파일해야 합니다.
Dynamic Library (동적 라이브러리)
정의
- 동적 라이브러리는 프로그램 실행 시 로드되는 라이브러리입니다.
- mac에서의 확장자는 .dylib 입니다
- 윈도우에선 .dll, 리눅스에선 .so 를 사용한다고 하네요!
링크 방식
- 컴파일 시점이 아닌, 실행 시점에 메모리에 로드되어 사용됩니다.
- 실행 파일에는 라이브러리에 대한 참조만 포함됩니다
장점
- 메모리의 절약
- 필요한 시점에서 로드되고, 불필요하면 해제되기 때문에 메모리 상 이점이 있습니다.
- 업데이트 용이
- 라이브러리의 변경 사항을 실행 파일을 재컴파일 하지 않고 적용할 수 있습니다.
단점
- 의존성의 관리
- 프로그램이 실행될 때 필요한 동적 라이브러리가 존재하지 않으면, 실행이 실패할 수 있습니다.
마치며..
- 개발은 결국 돌고 돌아 CS인가 봅니다…!