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에 저장해놓고 사용하는 것으미르 컴파일 속도가 적개걸림
- 메모리도 효율적으로 사용 가능
- 단점
- 비교적 런타임 속도가 느림
참조