Notice
Recent Posts
Recent Comments
Link
study record
[iOS] iOS Framework 본문
Framework란?
Framework
- 공유된 recources (dynamic shared library, nib files, image files, localized strings, header files, and reference documentation)를 single package로 캡슐화하는 계층형 디렉토리입니다.
- *헤더파일, localizable파일, 이미지, 문서와 같은 추가 리소스까지 이 모든 것을 하나의 Bundle로 묶어놓은 것
- Bundle: 서브 디렉토리 내부의 파일 디렉토리
Library
- 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미한다.
- 프로그램이 연결할 수 있는 패키징된 Object 파일들의 모음
- 공통점 : 프로그램을 쉽게 만들 수 있게 하는 공통된 목적이 있음
- 차이점 :
- framework가 컴파일된 library binary와 관련 header를 패키징할 수 있다.
- Framework은 리소스를 패키징된 형태로 함께 제공할 수 있지만, 라이브러리는 소스코드만 포함할 수 있다.
- Framework은 라이브러리보다 효율적으로 리소스를 관리할 수 있게 해준다.
- 즉, Framework가 몸집이 크고 Library가 몸집이 작으며, Framework안에 Library가 속할 수 있음
- Framework은 여러 버전을 동일한 Bundle에 포함하여 하위 버전 호환성을 지원할 수 있다.
- framework가 컴파일된 library binary와 관련 header를 패키징할 수 있다.
iOS Framework 종류
Static Framework(정적 프레임워크)
- = Source File + Static Library + Static Linker
- Static Linker를 통해 Static Library 코드가 Execute file(= appliccation file) 내로 들어가 Heap 메모리에 상주
- 앱 실행파일에 직접 복사되어 있으므로 런타임상 속도 빠름
- 참조가 아닌 복사이므로 안정적
- dynamic에 비해 메모리 더 소모
- Framwork 안에 이미지 파일과 같은 리소스 파일이 있어도 사용불가
- Static Library가 복사되므로, Static Framework를 여러 Framework에서 사용하면 코드 중복이 발생
Dynamic Framework (동적 프레임워크)
- = Source File + Dynamic Library References + Dynamic Library + Static Linker
- 파일이 아닌 주소를 execute file (= application file)에 저장하고, Static Linker를 통해서 Stack으로 필요한 라이브러리들을 불러와서 사용하는 형태
- 주소 정보들은 Heap에 상주
- Framework내에 이미지나 뷰같은 리소스 파일, Bundle을 Embed할 수 있음
- 컴파일 속도 상승
- 메모리 상 필요할 때 load시키므로 lazy함
Static Framework와 Dynamic Framework 장단점
- Static Framework - 필요한 파일들을 Heap에 복사해와서 사용하는 것이므로,
- 장) 런타임 속도가 빠름
- 단) 메모리가 많이 사용
- 단) 컴파일 속도가 오래 걸림
- Dynamic Framework는 주소값을 Heap에 저장해놓고 사용하는 것이므로
- 장) 컴파일 속도가 적게 걸림
- 장) 메모리를 효율적으로 사용
- 단) 런타임 속도가 느림
- Framework 생성시 Build Settings > Linking > Mach-O Type을 통해 선택이 가능하다.
- 프레임워크 생성 시 디폴트는 dynamic으로 만들어짐
Framework의 형태
.a 형식파일 - Static Library
- 컴파일될 때 사용할 코드들을 Static Linker에 의해 Execute file에 복사하여 사용
- Execute file의 몸집이 커지고 프로그램 시작 시간이 긴 단점이 존재
.dylib 형식 파일 - Dynamic Library
- Static Linker는 라이브러리의 reference만 저장하고 Execute file에 패키징되어 있지 않은 것
- static에 비해 작은 Executable file이 만들어지지만, dynamic library를 로드하는 시간이 있어서 launch time이 오래 걸리게 된다.
.framework
- 라이브러리에 헤더파일, 현지화파일, 이미지, 문서와 같은 추가 리소스 모든 것을 하나의 번들로 묶을 수 있는 것
- 코드 및 기타 재사용 가능한 자원을 전달하여 코드가 작동하도록 하는 패키지
.xcframework
- Muliple Architectures and Platforms를 위해 나온 개념
- AppKit과 UIKit, Simulator용을 한번에 지원 가능
- 여러 프레임워크를 다시 한번 감싸는 형태
- 시뮬레이터 빌드를 포함하여 여러 플랫폼 (iOS, macOS, tvOS, watchOS)에서 사용할 수 있도록 Xcode에서 만든 배포 가능한 바이너리 패키지
- XCFramework는 Static Framework이거나 Dynamic Framework 둘 다 가능
- 원래 Static Framework는 Bundle화만 할 수 있었지만, XCFramework에서는 header와 함께 Bundling이 가능
자주 사용되는 형태
Static Framework, .xcframework
이유
→ 여러 플랫폼에서 사용할 수 있도록 프레임워크를 구성할 수 있다.
→ 런타임 속도가 빠르다.
→ 참조가 아닌 복사이므로 안정적
→ LaunchTime을 줄이기 위해 Dynamic Framework보다 Static Framework의 사용
-> Dynamic Framework는 런타임에 시작할 때 다 로드한다. 사용할 때 로드하는 방식이 아니라. 그래서 static 보다 더 오래 걸리는 것이다.
'iOS > iOS 정리' 카테고리의 다른 글
[iOS] Xcode 프로젝트 개념 (xcodeproj, xcworkspace의 차이) (3) | 2024.10.13 |
---|---|
[iOS] iOS 레이아웃 사이클 (0) | 2022.04.06 |
[iOS] invalidateIntrinsicContentSize() (0) | 2022.04.05 |
[iOS] UIView의 Layer란? (0) | 2022.04.01 |
[iOS] UIResponder (0) | 2022.03.30 |