개발을 잘하고 싶은 주니어?
Framework란? Library란? 본문
Framework
개발 공부를 하다 보면 프레임워크라는 단어를 많이 접하게 됩니다.
이 전에는 그냥 특정 기능을 구현하고 싶을 때 사용하는 메서드나 프로퍼티들을 모아 놓은 패키지? 정도라고 생각하고 그냥 넘어갔습니다.
(UIKit 도 UI 관련한 메서드나 프로퍼티들을 지원하고 있는 프레임워크입니다.!)
하지만 정확한 의미를 알기 위해서 애플 문서를 찾아보았습니다. 링크는 여기 ⬇️
- 프레임워크란 이미지 파일, nib 파일, localized strings, 헤더 파일, 레퍼런스 문서와 같은 공유 리소스들을 하나의 패키지로 묶어놓은 계층적인 폴더?(hierarchical directory)입니다.
- 또한 말 그대로 뼈대라는 의미를 가지고 있습니다. 개발을 할 때, 어느 정도의 구조를 제공해주기 때문에 개발자는 이 구조 위에서 코드를 더 추가할 수 있습니다.
프레임워크를 이해하기 위해서는 bundle의 개념을 알아야할 필요가 있습니다. 번들은 디렉토리(파일을 포함하고 있는 폴더?)라고 생각하면 됩니다. iOS에서, 번들은 관련 있는 파일들을 하나의 패키지로 묶어서 사용할 수 있도록 합니다. 예를 들어서, 이미지, nib 파일이나 컴파일 코드 같은?
그래서 시스템은 이것을 하나의 파일로 생각해서, 개발자들이 내부 구조를 알지 못하는 상태에서 번들의 리소스들에 접근할 수 있도록 해줍니다.
위에 얘기했던 것처럼, 헤더, localization files, 문서와 같은 것도 포함을 할 수 있는데, 우리는 이것을 framework라는 이름의 번들로 사용을 합니다.
https://www.runtastic.com/blog/en/frameworks-ios/
Library
Library란 활용가능한 도구들의 집합을 말합니다. 개발자는 라이브러리의 도구를 가지고 개발에 이용합니다.
Alamofire나 RxSwift, Kingfisher와 같은 것도 Library라고 할 수 있습니다.
Kingfisher는 url을 가지고 해당 url의 이미지를 로드하는 라이브러리입니다. 그래서 우리는 이 기능을 가지고 이미지를 로드할 수 있습니다. (라이브러리가 제공하는 기능을 이용한다는 개념?)
Framework vs Library
라이브러리와 프레임워크는 제어 흐름에 대한 주도성이 누구에게 있냐에 차이가 있습니다.
라이브러리는 개발자가 호출할 수 있는 클래스들의 집합입니다. 그래서 주도성은 그것을 어떤 식으로 사용할지에 대해 고민하는 개발자에게 있습니다.
반면에 프레임워크는 전체적인 흐름에 대한 주도를 가지고 있으며 (가이드라인이 있다고 생각하면 될 듯?) 개발자는 그 흐름 내에서 필요한 코드를 추가합니다.
여기서 Inversion of Control(제어의 역전)이 적용되었다고도 하는데 이것은 기존에 클라이언트 코드가 갖고있던 제어권을 프레임워크에게 넘긴다고 하는 의미입니다.
Reference
'개발 > iOS' 카테고리의 다른 글
Swift Package Manager (SPM) 공부하기 - 실습 (0) | 2021.11.27 |
---|---|
Swift Package Manager (SPM) 공부하기 - 이론 (0) | 2021.11.27 |
의존성(Dependency) 공부하기 (1) | 2021.11.27 |
Hex to Color (0) | 2021.11.23 |
URLSession 공부하기 - 3 (0) | 2021.11.23 |