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인가 봅니다…!