Framework vs Library
⭐️ Framework
- 프레임워크는 dynamic library, header files, and resources, such as storyboards, image files, and localized strings를 단일 패키지로 캡슐화하는 계층적 디렉터리입니다. 프레임워크를 사용하는 앱은 앱의 번들에 프레임워크를 포함해야 합니다.
- 라이브러리와는 달리 프레임워크에는 이미지, 에셋, 문서, 문자열 파일과 같은 리소스가 포함될 수 있습니다.
- 프레임워크 읽기 전용 리소스의 복사본이 하나만 로드되어 메모리에 상주하게 된다. 따라서 많은 iOS App과 extension이 하나의 프레임워크를 공유할 수 있어, 총 메모리 사용량이 줄어들게 됩니다.
⭐️ Library
- image, asset, nib, string file과 같은 리소스파일들을 포함할 수 없습니다.
🥅 정리
- 모듈화를 할 때, 대체적으로 Framework를 활용하게 될 것 같습니다.
- Library는 리소스 파일이 없다보니, 모듈에 대한 메타 정보를 가질 수 있는 plist도 없기 때문에, 모듈을 만들기에 적절하지 않아보입니다.
Static vs Dynamic
- 두 방식의 차이는 **"컴파일된 코드를 참조하는 방식"**에 있습니다.
- 핵심은 **정적 링커(Static Linker 혹은 ld(loader))**가 정적 라이브러리(.a)와 동적 라이브러리(.dylib)의 링킹을 다르게 처리한다는 것입니다.
- 정적 라이브러리
- 앱이 사용하는 프레임워크의 코드는 컴파일 시간동안 ‘Static Linker’에 의해 최종적으로 앱의 실행파일 안에 복사
- 동적 라이브러리
- 동적 라이브러리에서 사용되는 심볼 이름과 런타임 시 라이브러리의 경로와 같은 일종의 약속을 기록
- 런타임 상에서 Mach-O 파일과 연결(참조 관계)
⭐️ Static

- 라이브러리 코드가 실행 파일 내부에 포함되므로 실행 파일의 크기가 커집니다.
- Static Library가 업데이트 된다면, 다시 link 작업을 해야 합니다. 즉, 다시 컴파일 하는 과정이 생길 수 있습니다
- 정적 라이브러리는 코드가 활발히 변경되지 않는 안정적인 코드에 가장 적합합니다. 빌드 시간을 줄이기 위해서 현재 개발 중인 코드를 정적 라이브러리 밖으로 이동하는 것을 고려해야 합니다.