티스토리 뷰

정적/동적 라이브러리 (이하 스태틱/다이나믹 라이브러리)

Overview of Dynamic Libraries

앱의 퍼포먼스를 결정하는 중요한 두가지 요소는 앱 실행 시간과 메모리 공간입니다.

앱의 실행가능한 파일의 크기를 줄이는것과 설치될 때 메모리 사용을 최소화하는 것이 앱의 시작을 빠르게하며 설치 후 메모리 사용을 줄여줍니다.

스태틱 라이브러리 대신 다이나믹 라이브러리를 사용하면 앱의 실행 파일 사이즈를 줄일 수 있습니다.

이것은 앱의 시작 시간을 줄이고 메모리를 효율적으로 사용되게 해줍니다.

 

Static Library

대부분의 앱의 기능들은 라이브러리의 실행가능한 코드들에 구현되어 있습니다.

앱이 스태틱 링커를 사용하여 라이브러리와 링크되면, 앱에서 사용하는 코드는 생성된 실행가능한 파일에 복사됩니다.

스태틱 링커는 컴파일된 소스코드(object code)와 라이브러리 코드를 하나의 실행 파일로 수집하여 런타임에 완전히 메모리에 로드합니다.

앱의 실행파일이 되는 라이브러리를 스태틱 라이브러리(Static Library)라고 합니다.

스태틱 라이브러리는 object files의 컬렉션이나 보관함입니다.

앱이 실행되면, 스태틱 라이브러리 포함 앱의 코드들이 앱의 address 공간에 로드됩니다.

많은 스태틱 라이브러리를 링킹하면 앱의 실행파일이 커지게 됩니다.

아래 그림은 스태틱 라이브러리에 구현된 기능을 사용하는 앱의 메모리 사용을 보여줍니다.

앱의 큰 실행가능한 것들이 느린 실행시간과 큰 메모리 공간으로 고통받습니다.

또한 스태틱 라이브러리가 업데이트되면, 클라이언트 앱은 그 개선사항을 누릴 수 없습니다.

개선된 기능에 접근하려면, 앱 개발자는 앱의 오브젝트파일을 새로운 라이브러리에 링크해야합니다.

앱의 유저는 앱의 최신 버전으로 바꿔야합니다.

그러므로 스태틱 라이브러리 사용은 개발자와 사용자 모두에게 지장을 주는 작업입니다.

Dynamic Library

더 좋은 방법은 실제로 필요할 때(launch time이나 runtim) 앱이 로드하도록 하는 것입니다.

이것을 다이나믹 라이브러리라고합니다.

다이나믹 라이브러리는 클라이언트 앱에 정적으로 링크되지 않습니다.

실행파일의 일부가 되지 않습니다.

대신에 다이나믹 라이브러리는 앱을 시작하거나 실행할 때, 로드(링크)될 수 있습니다.

Note: Dynamic libraries == dynamic shared libraries, shared objects, dynamically linked libraries

아래 그림은 다이나믹 라이브러리를 사용해서 스태틱 라이브러리보다 메모리사용을 줄인 것을 보여줍니다.

다이나믹 라이브러리를 사용하면 라이브러리에 대한 링크가 정적이 아니라 동적이므로 프로그램이 자동으로 사용하는 라이브러리에 대한 개선의 혜택을 누릴 수 있습니다.

앱 개발자가 다시 앱을 컴파일하지 않아도 클라이언트 앱이 개선될 수 있습니다.

OS X 앱들은 OS X의 모든 라이브러리가 다이나믹라이브러리기 때문에 이 혜택을 볼 수 있습니다.

또 다른 이점은 로드될 때 초기화될 수 있고, 클라이언트 앱이 정상적으로 종료되면 clean-up tasks가 가능하다는 것 입니다. (스태틱은 불가능)

한가지 이슈! 다이나믹 라이브러리는 항상 앱에 호환가능해야합니다.

왜냐하면 코드 수정 없이 라이브러리의 새로운 버전이 사용가능해야하기 떄문입니다.

즉 라이브러리 API는 바뀌면 안됩니다.

하지만 API가 바뀌어야할 때가 있는데, 이럴때는 클라이언트 앱을 실행하기 위해 이전 버전의 라이브러리는 유저의 컴퓨터에 남아있어야 합니다.

 

같이 읽으면 좋은 글

프레임워크란?

https://baechukim.tistory.com/111

 

[iOS] What are Frameworks? 번역 / 프레임워크란?

https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html What are Frameworks? What are Frameworks? A framework is a hierarchical direc..

baechukim.tistory.com

 

댓글
공지사항