Swift의 Library, Framework, Package
- UIKit
- Swift
- Xcode
- CocoaPods
Swift의 Library, Framework, Package
Swift에서 라이브러리, 프레임워크, 패키지는 모두 코드 재사용과 배포를 위한 모듈이라는 공통점이 존재한다.
다만,
구조와 사용 목적에서 차이가 존재한다.
📌 Library (라이브러리)
- 라이브러리는 여러 기능(코드)을 미리 구현한 코드 집합이다.
- 개발자가 원하는 시점에 직접 호출해 사용하는 구조이며 제어의 흐름 권한이 사용자에게 존재한다.
- 보통 정적 라이브러리(
.a) 또는 동적 라이브러리(.dylib,.so) 등 파일 형태로 배포된다. - 단순 기능 모듈 형태로 빌드, 리소스, 메타데이터를 포함하지 않고, 오직
코드만 제공한다!
🤔 그렇다면 정적 라이브러리와 동적 라이브러리의 차이는 뭘까?
💡정적 라이브러리(Static Library)
- 컴파일 타임에 실행 파일에 포함
→ 프로그램을 빌드할 때 라이브러리의 코드가 실행 파일에 복사되어 포함된다.
- 배포가 간편함
장점
→ 실행 파일만 배포해도 동작한다.
→ 외부 라이브러리가 따로 필요하지 않다.
- 파일 크기 증가
단점
→ 모든 코드가 포함되어 실행 파일 크기가 커진다.
→ 같은 라이브러리를 여러 개의 프로그램에서 쓸 경우 중복이 발생한다.
- 업데이트 시 재컴파일 필요
단점
→ 라이브러리를 새 버전으로 바꾸려면 프로그램 전체를 다시 컴파일해야 한다.
💡 동적 라이브러리(Dynamic Library, DLL, Framework 등)
- 런타임에 외부에서 로드
→ 실행 파일 자체에는 포함되지 않고 프로그램 실행 시 외부 파일(공유 라이브러리)을 필요로 한다.
- 추가 배포 필요
→ 실행 파일과 함께 해당 동적 라이브러리 파일도 배포해야 정상적으로 동작한다.
- 메모리와 디스크 공간 절약
장점
→ 여러 애플리케이션이 하나의 라이브러리를 공유해 사용하므로 시스템 자원을 절약할 수 있다.
- 실행 파일 크기 작아짐
장점
→ 코드가 외부에 있으므로 실행 파일은 비교적 작게 유지된다.
- 개별 라이브러리만 업데이트 가능
장점
→ 동적 라이브러리 자체만 변경하면 프로그램을 다시 컴파일하지 않아도 된다.
- 호환성과 의존성 문제
단점
→ 실행 환경에 따라 라이브러리 파일 버전, 위치 등 의존성 문제가 발생할 수 있다.
📌 Framework (프레임워크)
- 프레임워크는 코드 집합(라이브러리)에
리소스(이미지, 스토리보드 등)와메타데이터,버전정보등이 포함된 더 큰 단위의 배포 패키지이다.
→ 사실상 라이브버리의 상위 호환이다.
- 일반적으로
.framework폴더 구조로 배포된다. - ⭐ 앱의 라이프사이클 일부 혹은 전체의 제어 권한을 프레임워크가 가질 수 있어 이벤트와 구조의 틀을 제공하는 역할을 수행할 수 있다!
- UIKit, Foundation 등 iOS의 기본 퍼스트 파티 프레임워크가 대표적이다.
🤔 Static Framework와 Dynamic Framework의 차이는 무엇일까?
📌 Package (패키지, Swift Package)
- Swift Package는
SwiftPM(Swift Package Manager) 시스템이 인식할 수 있는 모듈화된코드 집합이다. - SPM에서 관리하며
Package.swift파일로 구조와 의존성, 타깃 등을 정의한다. - ⭐ 여러 라이브러리, 모듈, 테스트 타깃 등을 포함할 수 있어, 내부적으로 세분화, 계층화가 매우 쉽다!
- Framework처럼 리소스나 바이너리도 배포 가능하며 오픈소스 구조에 적합하고, 의존성 관리가 용이하다.
- 패키지 단위는
SPM,CocoaPods등 패키지 매니저와 바로 연동할 수 있다.
🔗 참고 자료
Library, Framework, Swift package
[iOS] Library, Framework, Swift Package
Xcode Modules, Framework and Libraries Comparison - Justin Eghtedari
iOS, iOS에서 프레임워크와 라이브러리의 차이점을 알아보자!
Static Framework vs Dynamic Framework - HackMD
*위 글이 가장 중요한 레퍼런스