Jaebi의 Binary는 호남선

Library & Framework 본문

Xcode

Library & Framework

jaebijae 2024. 1. 8. 04:19

목차

    Library

    • Library → Target(앱)에서 사용될 코드와 데이터들의 모임
    • 컴파일 시점 또는 런타임 시점에 Target에 링킹되어 사용
    • 이미지와 같은 리소스들은 포함 X
    • Target에 어떻게 링킹하는가에 따라 Static, Dynamic 타입으로 나눠짐

    Static Library (.a)

    • object file의 묶음, archiver tool을 이용하여 생성
    • zip archiving과 비슷한 개념
    • 앱에서 사용하는 코드는 컴파일 시점에 static linker를 통해 executable file로 복사 → 앱 런타임 전체 시간동안 메모리 Heap 영역에 로드되어 사용
    • 한계점:
      • 사용될 타겟의 프로세서 아키텍쳐와 같게 빌드 해야함 (x86-64, arm64등)
      • 리소스 파일들(image, assets, nibs, strings file)을 포함할수가 없음

    Dynamic(Shared) Library (.dylib)

    • 컴파일 시점에 executable file에 복사되지 않음, 필요한 시점에 동적으로 로드 됨
    • 컴파일 할 필요 없이 쓸 수 있슴 (새로운 빌드 X)
    • 모든 iOS 및 macOS 시스템 라이브러리는 dynamic library임
    • 한계점:
      • 앱 컴파일 시점에 메모리에 로드하지 않아, 상대적으로 static library 보다 접근 속도가 느림 (대신 앱의 스타트업 속도를 빠르게 함)

     

    Framework

    • 계층 구조를 갖는 디렉터리 (목적이 같은 코드의 모음, Library와 비슷)
    • Dynamic Library, header file, resource (storyboards, image files, localized string)등을 하나의 페키지에 감싸서 가지고 있음
    • 앱 번들안에 포함 시켜야 함
    • Library와 다른점
      • 리소스를 포함 가능
      • 하나의 Framework 코드 및 리소스를 메모리에 올릴수 있음 → 시스템 성능 향상 가능
      • 여러 앱이 해당 Framework이 필요한 경우, 공유되어 사용됨

    Static Framework

    • Source File + Static Library + Static Linker
    • Static Linker를 통해 Static Library 코드가 Execute file (application file)에 들어가 Heap memoery에서 상주
    • Static Library가 복사됨으로 Static Framework를 여러 Framework에 사용하면 코드 중복 발생 (모듈화 시 주의)
    • 장단점
      • 장점 런타임 속도가 빠름
      • 단점 메모리가 많이 사용
      • 단점 컴파일 속도가 오래 걸림

    Dynamic Framework

    • Source File + Dynamic Library References + Dynamic Library + Static Linker
    • 파일이 아닌 주소를 execute file에 저장, static linker를 통해 stack으로 필요한 라이브러리들을 불러와서 사용
    • 주소 정보들은 Heap에 상주 (코드 복사 X → 코드 중복 발생 X → 의존성 관리 편함)
    • 장단점
      • 장점 컴파일 속도가 빠름
      • 장점 메모리가 효율적으로 사용
      • 단점 런타임 속도가 오래 걸림

    정리

    • 많은 Static Library → 앱 바이너리 매우 커짐, 앱 런치 시간 증가, 메모리 많이 사용
    • Framework가 몸집이 크고 Library가 몸집이 작으며, Framework안에 Library가 속할 수 있음
    • Library는 “사용하는 주체”가 기능을 요청하여 사용, Framework는 “사용하는 주체”와 기능의 제어권이 역전 (IoC)
    • 코드상의 API만 제공해주는 경우 static framework 사용, 아니라면 dynamic framework 사용할 것

    Reference

     

    iOS Library, Framework, Swift Package,,, 알아보자 차이점

    멀티 모듈 코드베이스의 시대

    medium.com

     

    [iOS - swift] 1. 모듈화 개념 - Library vs Framework (static library, dynamic library, static framework, dynamic framework)

    Tuist로 모듈화 최신 포스팅 글 목록 > https://ios-development.tistory.com/1303 1. 모듈화 개념 - Library vs Framework (static library, dynamic library, static framework, dynamic framework) 2. 모듈화 개념 - Binary File 개념 (Mach-O, C

    ios-development.tistory.com

     

    'Xcode' 카테고리의 다른 글

    Xcode Cloud 세팅 및 연동  (0) 2024.07.16
    Xcode 유용한 단축키  (0) 2024.05.06
    Target & Scheme & Build Setting / Configuration  (0) 2024.01.08
    Workspace & Project  (0) 2024.01.08