ios dev kangwook.

iOS) Static / Dynamic Library 본문

iOS

iOS) Static / Dynamic Library

kangwook 2022. 10. 4. 23:17

iOS에서 Library란?

Xcode Target의 일부로 빌드되지 않은 코드 및 데이터 조각을 정의한 것

일종의 호출할 수 있는 클래스 및 함수들의 집합.

  • 각 호출은 약간의 작업을 수행하고 클라이언트에게 제어권을 반환

라이브러리는 사용자가 전체적인 Application의 Flow를 만듦

Framework?

공유 라이브러리와 헤더 및 다른 리소스의 하위 디렉토리를 포함하는 번들

프레임워크는 전체적인 Application의 Flow를 스스로가 쥐고 있고, 라이브러리를 필요한 곳에서 가져다 씀 (제어의 역전)

Static Library( .a)

  • Static Library를 만들고 linker를 통해 executable file을 생성(컴파일 마지막 쯤 일어남)
  • 이 때, static library 코드 역시 executable file에 복사됨
  • 따라서 앱이 실행되면 앱 소스코드 + static library 코드를 포함하는 것들이 주소 공간에 로드됨

즉, 큰 executable file은 느린 시작시간 + 큰 메모리 공간을 가져감

또한, static library가 업데이트 되면 클라이언트 앱은 개발자가 업데이트 된 library와 다시 Link하지 않는 이상 업데이트 된 기능을 사용할 수 없음

Dynamic Library( .dylib)

  • Dynamic Library를 만들고 linker를 통해 executable file을 생성
  • 이 때, dynamic library에 대한 참조만 executable file에 포함됨
  • executable file이 생성되고 link는 되었지만, 복사가 안됐음 

즉, executable file의 크기가 Static에 비해 작음

dylib은 이 많을수록 main이 실행되기 전까지 launch time이 길어지기 때문에  dylib이 많을 수록 앱 실행속도가 느려짐

Static Library vs. Dynamic Library

Static Library 

  • 장점
    • 필요한 파일들을 Heap에 복사해와서 사용하는 것이므로 런타임 속도가 빠름
  • 단점
    • 메모리가 많이 사용됨
    • 컴파일 속도가 오래 걸림

Dynamic Library

  • 장점 
    • 주소값을 Heap에 저장해놓고 사용하는 것으미르 컴파일 속도가 적개걸림
    • 메모리도 효율적으로 사용 가능
  • 단점
    • 비교적 런타임 속도가 느림

 

참조

'iOS' 카테고리의 다른 글

iOS) Xcode Unit Test  (0) 2022.10.10
iOS) Sandbox  (0) 2022.10.09
iOS) Architecture Pattern  (0) 2022.09.29
iOS) Scene  (0) 2022.09.18
iOS) Split View  (0) 2022.09.17
Comments