관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Static Library vs Dynamic Library (Cocoapods의 use_frameworks! 의미, 정적 라이브러리, 동적 라이브러리) 본문

iOS 응용 (swift)

[iOS - swift] Static Library vs Dynamic Library (Cocoapods의 use_frameworks! 의미, 정적 라이브러리, 동적 라이브러리)

jake-kim 2021. 12. 14. 22:12

기본 지식 - Compile, Link

  • 실행파일 까지, Source Code -> Object Code -> Executable 진행
  • compile: 사람이 이해하는 `Source Code`를 컴퓨터가 이해할 수 있는 언어 `Object Code`로 바꾸는 작업
    Source Code -> Object Code
  • link: 컴퓨터가 이해할 수 있는 `Object Code`에서 실행 가능한 파일로 변경하는 작업
    Object Code -> Executable
    > 컴파일하면 *.lib(링크 시 필요), *.dll(실행 시 필요) 파일이 자동으로 생성

Static Library, Dydnamic Library

  • 라이브러리를 사용할 프로젝트에 포함시키는 시점의 차이가 존재
    • Static Library: link 시점에 라이브러리를 executable 파일 바이너리에 포함 
    • Dynamic Library: run time 중에 프로그램에 해당 라이브러리 코드를 찾아서 연결
  • 각 단점
    • Static Library: 불필요하게 실행 파일들이 커지고 memory 공간 활용의 효율이 낮은 단점 존재
    • Dynamic Library: 공유 라이브러리를 메모리에 올리려면, 찾고 올리는데에 시간이 걸리므로 성능 저하
  • 각 장점
    • Static Library: 실행 바이너리속에 라이브러리들이 포함되어 있으므로 별도의 추가 작업없이 독립적으로 라이브러리 사용가능 
    • Dynamic Library: 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하므로 메모리 효율이 상승

Cocoapods에서 use_frameworks!의미

  • Cocoapods은 Dynamic Library만 지원하는데, 이때 Dyanamic Library를 사용한다는 명시적인 의미로, use_frameworks!로 선언
Comments