YunDaeHyeon
← Lab

Swift의 Library, Framework, Package

스터디2025.08.21
  • 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의 차이는 무엇일까?

[iOS - swift] Static Framework와 Dynamic Framework의 개념 (UIKit은 Static일까? Dynamic일까?, XCFramework 개념, Mach-O 개념, Embed &am


📌 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에서 프레임워크와 라이브러리의 차이점을 알아보자!

yoonbumtae.com

Static Framework vs Dynamic Framework - HackMD

[iOS - swift] Static Framework와 Dynamic Framework의 개념 (UIKit은 Static일까? Dynamic일까?, XCFramework 개념, Mach-O 개념, Embed &am

*위 글이 가장 중요한 레퍼런스