본문 바로가기

Swift

Framework (Dynamic VS Static)

728x90

Framework / Library / Module 

프로젝트를 만들 때 하나부터 열까지 모두 손수 만들지 않는다. 나 그러면 개발자 안 할 것임 은 김소깡 ㅎㅇㅌ !

그래서 보통 프레임워크 / 라이브러리 / 모듈을 사용하는데 이런 것들을 왜 사용할까?

  • 분업, 협업에 용이
  • 빠른 개발 및 효율적인 개발 가능
  • 재사용성 코드 
  • 관련(비슷한) 코드를 그룹화(모듈화)하고 코드에 대한 액세스를 제한(캡슐화)하는 메커니즘을 제공 

프레임워크는 Dynamic shared Library, Nib 파일, 이미지 파일, 다국어 문자열, 헤더 파일, 레퍼런스 문서와 같이 공유 리소스를 패키지로 캡슐화하는 계층 구조 파일 디렉토리를 말한다.

구조를 보게 되면 기본적으로 아래와 같은 형태를 갖고 있다.

├── Resources -> Versions/Current/Resources
├── Versions
│   ├── A
│   │   ├── Resources
│   │   │   ├── BridgeSupport
│   │   │   │   └── iTunesLibrary.bridgesupport
│   │   │   ├── Info.plist
│   │   │   ├── framework.sb
│   │   │   └── version.plist
│   │   ├── _CodeSignature
│   │   │   └── CodeResources
│   │   └── iTunesLibrary
│   └── Current -> A
└── iTunesLibrary -> Versions/Current/iTunesLibrary

 

프레임워크와 라이브러리를 좀 더 자세히 살펴보면 static / dynamic 이라는 키워드를 볼 수 있다.

.. 작작해 ..

 

이 둘의 차이는 무엇일까?

Dynamic Framework VS Static Framework

프레임워크를 Dynamic으로 생성할지, Static으로 생성할지는 프레임워크 생성 시 

Build Settings > Linking > Mach-O Type을 통해서 선택이 가능하다.

 

 

결론부터 이야기하자면, 이 두 개의 차이는 "컴파일된 코드를 참조하는 방식"에 있다.

 

  • Dynamic
    • 런타임 상에서 Mach-O 파일과 연결 (참조 관계) 
    • 라이브러리에 대한 참조만 포함 
  • Static 
    • 앱이 사용하는 프레임워크의 코드는 컴파일 시간 동안 Static Linker에 의해 앱의 실행파일 안에 복사
    • 라이브러리 코드가 모두 포함 

간단하게 말하자면, 참조/복사의 차이이다.  

 

이 둘이 프레임워크 구조가 다른데,

Dynamic Framework

Xcode에서 프레임워크를 만들면 기본적으로 Dynamic으로 만들어진다. 

 

Dynamic 프레임워크는 동시에 여러 프레임워크 또는 프로그램에서 동일한 코드 사본을 공유하고 사용하므로 메모리를 효율적으로 사용한다. 동적으로 연결되어 있으므로 전체 빌드를 다시 하지 않아도 새로운 프레임워크 사용이 가능하다. 

 

Static Linker를 통해서 > Dinamic Library Reference가 애플리케이션 코드에 들어가고 > 모듈 호출 시에 Stack에 있는 Library에 접근하여 사용한다.

 

여러 버전의 라이브러리가 존재할 수 있기 때문에 symbolic links를 구성하기도 한다.  (이건 좀 더 공부해야겠다..)

 

장점

  • 프레임워크 내에 이미지나 뷰와 같은 리소스 파일 또는 번들을 embeded 할 수 있다.
  • 링크를 참조하기에 static에 비해 메모리가 자유롭다. (필요할 때 로드하므로 lazy 하다.)
  • 빌드 속도가 단축된다.

단점

  • 디버그 시 필요한 dSYM 파일을 프레임워크 개발자가 제공해야 한다.
  • static에 비해 런타임 상 속도가 느리다. 

Static Framework

Static Framework는 Static Linker를 통해 Static Library 코드가 애플리케이션 코드 내로 들어가 Heap 메모리에 저장된다.

 

Dynamic과 다르게 Reference가 아니라 Static Library 자체가 복사되므로 여러 프레임워크에서 사용하면 코드 중복이 발생한다. 

Static 프레임워크가 많아질수록 큰 excutable file이 만들어지고 새 버전이 나오면 또다시 컴파일해서 link 해야 한다.

 

장점

  • 앱 실행 파일에 직접 link 되어 있으므로 런타임상 속도가 빠르다.
  • 참조가 아닌 코드에 복사되므로 안정적이다.

단점

  • 메모리를 Dynamic에 비해 더 차지한다. 

'Swift' 카테고리의 다른 글

Codable  (0) 2022.08.31
Type Casting Up? Down?  (2) 2022.08.19
Access Control (feat. Framework)  (1) 2022.08.16
Attribute (@어쩌구)  (0) 2022.08.10
Closure (클로저)  (0) 2022.08.10