관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] framework vs Library (프레임워크와 라이브러리의 차이), static framework, dynamic framework 본문

iOS 기본 (swift)

[iOS - swift] framework vs Library (프레임워크와 라이브러리의 차이), static framework, dynamic framework

jake-kim 2021. 1. 5. 21:45

* 더욱 자세한 static framework외 dynamic framework 개념은 최신 포스팅 글 참고

프레임워크 vs 라이브러리

  • 라이브러리 - "사용하는 주체"가 기능을 요청하며 사용 (언제 요청 할지, 언제 응답 받을지, 언제 결과 처리할 지 모두 주체가 결정)
  • 프레임워크 - "사용하는 주체"와 기능의 제어권이 역전 IoC (Inversion of Control)
    RxSwift와 같이 bind 시켜놓으면 (제어권 부여), 이벤트 일어날 시 처리되는 (제어의 역전) 로직

Inversion of Control의 장점

  • 재사용성 증가
  • 관심사의 분리: As a Service (사람이 전기를 사용할 때 toggle switch만 키면 됨 - 관심사의 분리)
  • DI(Dependency Injection)과의 연관: 프레임워크가 호출할 내용을 Dependency로 보고, "사용하는 주체"한테 injection하는 개념으로 이해

iOS에서 프레임워크의 종류

  • static framework: Do not embed (복사)
  • dynamic framework: Embed (참조)
  • 차이점은 컴파일된 코드를 참조하는 방식
  • 프레임워크 생성 시 디폴트는 dynamic으로 만들어짐

Static Framework

  • 앱의 실행 파일 안에 복사
  • 앱 실행파일에 직접 복사되어 있으므로 런타임상 속도 빠름
  • 참조가 아닌 복사이므로 안정적
  • dynamic에 비해 메모리 더 소모
  • Framwork안에 이미지 파일과 같은 리소스 파일이 있어도 사용불가

static framework 대상일 경우 "Do Not Embed" 선택

Dyanamic Framework

  • 런타임 상에서 Mach-O 파일과 참조관계
  • Framework내에 이미지나 뷰같은 리소스 파일, Bundle을 Embed할 수 있음
  • 빌도속도 상승
  • 메모리 상 필요할 때 load시키므로 lazy함
  • 디버그시 필요한 dSYM파일을 프레임워크 개발자가 따로 제공해야함
  • static에 비하여 런타임에서 속도 저하

Dynamic Framework 대상일 경우 "Embed & Sign" 선택

* sign은 애플개발자 계정에서도 사용되는 프레임워크의 signing파일이라고 이해

코드상의 API만 제공해주는 경우 static framework 사용, 아니라면 dynamic framework 사용할 것

Comments