일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dartz
- flutter
- LifeCycle
- OpenAI
- 문법
- Xcode
- concurrency
- builder
- SwiftUI
- designpattern
- EventLoop
- network
- WWDC24
- AppleDeveloper
- uikit
- Architecture
- Adapter
- WiFi
- GIT
- dart
- tuist
- singleton
- philipshue
- iot
- isolate
- weatherkit
- factory
- state
- SampleApp
- swift
Archives
- Today
- Total
Jaebi의 Binary는 호남선
Library & Framework 본문
목차
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
'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 |