Programming/Mac & iOS

[iOS] Library & Framework in iOS

MB Kyle KWON 2017. 1. 31. 12:45

    코드의 재사용성을 높이는 방법 중에 하나가 활용도가 높은 코드를 Library와 Framework로 구현하여 사용성을 제고하는 것이다. iOS 플랫폼에서도 Library와 Framework를 제공한다. 하지만 기존 우리가 알던 Library와 Framework의 의미와 조금 다르다. Library는 실행가능한 정적인 코드의 집합을 뜻하고 Framework는 동적인 App 번들을 뜻한다. 그럼 Library와 Framework의 특징에 대해 명확하게 알아보자.




Library (Static Library)

    Library(.a) 는 앱에 링크된 Object file(.o) 들의 모임이다. iOS8에서 Framework가 나오기 전까지 유일하게 사용되던 옵션이었다. 프로그램과 링크되어 있다. 즉, 빌드 과정에서 Library의 내부 모듈들이 target 앱에 전부 링크된다. 단, Library는 실행가능한 코드만을 포함할 수 있다. 그리고 이 코드를 Client에서 사용하기 위해선 API에 대해 서술된 Header file이 필요하다. 




Framework (Dynamic Bundle)

    Library(.a) 는 오로지 실행 가능한 코드만 가질 수 있었다. 하지만 Framework(.framwork) 는 번들이다. 번들이라 함은 파일들이 포괄적으로 담길 수 있다는 말이다. Framework는 Library와 더불어 API의 헤더 파일, Documentation, View, Control, UI, Assets, configuration file 등 다양한 파일을 담을 수 있다. 이외에 Framework만 가지는 특징은 아래와 같다.


  • Inversion of Control - Library는 오로지 Client에서 호출만 가능하지만 Framework는 Client와 상호간 호출이 가능하다. 예를 들어 Framework 내부에서 Client의 이벤트 핸들러를 역으로 호출하는 구현이 가능하다.
  • Framework에 이미지, UI, 코드 등을 하나의 Framework에 담을 수 있다. 
  • App과 Extension에서 모두 사용하는 코드의 경우, Framework로 구현하여 재사용성을 높일 수 있다.
  • API를 구현할 때, 필요한 Header file을 포함하므로 import 과정이 Library에 비해 비교적 쉽다.




http://www.knowstack.com/framework-vs-library-cocoa-ios/

'Programming > Mac & iOS' 카테고리의 다른 글

[RxSwift] Obseravbles  (0) 2017.05.13
[iOS] ipa와 번들에 대하여  (0) 2017.02.04
[iOS] WKWebView (instead of UIWebView)  (0) 2017.01.19
[iOS] APNS JWT (JSON Web Token)  (0) 2016.12.19
[iOS] What's new in iOS 10  (0) 2016.06.27