XCode에서는 Framewokr라는 것을 통해 모듈화 단위의 코드/리소스를 사용할 수 있다.

그리고 외부 소스를 가져다 사용할 때, Cocoapods, Carthage 같은 도구를 사용할 수 있다.

 

Framework에 대해 알아볼 것들

  1. 어떻게 구성되어있는가?
  2. 어떻게 동작하는가?
  3. Static/Dynamic 차이는 무엇인가?
  4. 전체적인 개발방식

Framework

Dynamic Shared Library, Nib 파일, 이미지, 다국어 문자열, 헤더 파일 등과 같이 공유 리소스를 패키지로 캡슐화하는 계층 구조 파일 디렉토리 이다.

그리고 Framework도 Bundle이며 NSBundle로 접근이 가능하다.

또한, 리소스 사본은 프로세스 수에 상관없이 항상 물리적으로 메모리에 상주하며, 리소스 공유로 풋 프린트를 줄이고 성능을 향상시킨다.

 

Dynamic Framework

XCode에서 Framework를 만들면 기본적으로 Dynamic Framework로 만들어진다.

Dynamic Framework는 동시에 여러 프레임워크 또는 프로그램에서 동일한 코드 사본을 공유하고 사용하므로, 메모리를 효율적으로 사용한다.

동적으로 연결되어 있으므로, 전체 빌드를 다시하지 않아도 새로운 프레임워크 사용이 가능하다.

 

Static Linker를 통해 Dynamic Library Reference가 Application 코드(Heap)에 들어가고, 모듈 호출시 Stack에 있는 Library에 접근하여 사용한다.

 

Static Framework

Static Framework는 Static Linker를 통해 Static Library 코드가 Application 코드 내로 들어가 Heap 메모리에 상주한다.

따라서 Static Library가 복사되므로, Static Framework를 여러 Framework에서 사용하게 되면, 코드 중복이 발생한다.

 

Library는 Framework가 아니라 Static Library가 복사된 곳에 위치하므로, Bundle의 위치는 Static Framework가 아닌 Static Library가 위치한 곳이 된다.

때문에 번들을 접근할 때는 스스로가 접근하기보다는 외부에서 Bundle의 위치를 주입받는 것이 좋다.

 

어떤 타입을 사용해야 하는가?

일반적으로 리소스를 스스로 갖고 있거나 전체 소스를 제공하는 경우 -> Dynamic Framework

그렇지 않고 SDK 형태로 배포하는 경우 -> Static Framework

 

 

 

 

 

+ Recent posts