---
# System prepended metadata

title: ' Static Framework vs Dynamic Framework '
tags: [Dynamic Framework, Swift, "\U0001F4BB TIL", Static Framework]

---

<h1><center> Static Framework vs Dynamic Framework </center></h1>

###### title: `Static Framework vs Dynamic Framework`

###### tags: `💻 TIL`, `Static Framework`, `Dynamic Framework`, `Swift`

###### date: `2023-11-13T10:39:33.284Z`

> [color=#724cd1][name=데릭]

> [Framework vs Library - Sencha](https://www.sencha.com/blog/difference-between-framework-vs-library-snc/)
> [iOS - Static Framework vs Dynamic Framwork](https://ios-development.tistory.com/1309)
> [iOS - Framework vs Library](https://ios-development.tistory.com/1004)

## 개요

> Static Framework Dynamic Framework 대해 알아보고 차이점이 무엇인지에 대해 학습하자.<br>
> Framework와 Library의 차이점도 학습하자!

> [선행 학습 - Framework vs Library](https://hackmd.io/BH2HRWv9Qe-VFWAXsGnuEA)

## Static vs Dynamic

### Static Framework

> 앱의 실행 파일(executuable)에 바이너리 파일이 **포함되는** 형식을 의미한다.<br> 그리고, Static Framework는 **컴파일 타임**에 로드되는 방식이다. 

앞서 설명한대로, 실행 파일에 포함되기 때문에 앱의 크기가 증가할 수 있다. 

1. 장점

- 컴파일 타임에 로드하기 때문에 Dynamic Framework에 비해 빠른 속도를 가질 수 있다. 

2. 단점

**모듈화를 시도할 경우**

- Static Framework를 의존하게 되면 복사가 되는 형식이다. 

**NOTE**

> 여러 곳에서 A Static Framework를 의존하게 될 경우, 코드 중복이 발생할 수 있다.

![image](https://hackmd.io/_uploads/SyTNQXkNa.png)

> Static Framework 

- Source File + Static Library + Static Linker
- Static Linker를 통해 Static Library의 코드가 execute file에 결합되어 Heap 메모리에 할당된다.

**주의**

> Static Library는 복사되는 특징이 있는데 A Static Framework를 여러 Framework에서 의존하게 되면 코드 중복이 발생할 수 있다.


### Dynamic Framework

> 앱의 실행 파일(executable)에 **포함되지 않고**, **런타임** 시 연결된다.<br> 그리고, 앱이 실행되거나 필요할 때 프레임워크 코드가 메모리에 로드되는 방식이다. 

1. 장점

- Static Framework와 비교했을 때, 런타임 시에 프레임워크가 로드되기 때문에 앱의 크기가 증가하지 않는다. 

- 또한, Dynamic Framework는 코드를 복사하는 개념이 아니라서 의존하게 되어도 코드 중복을 고려할 필요가 없다. 


2. 단점

- Staic Framework 처럼 컴파일 시점에 앱의 바이너리 파일에 포함되지 않고 링크하여 사용하여 비교적 느린 속도를 가진다.

![image](https://hackmd.io/_uploads/HysXV7y4T.png)

> Dynamic Framework 

- Source File + Dynamic Library Reference + Dynamic Library + Static Linker
- execute file에 주소를 저장하고, Static Linker를 통해 Stack으로 필요한 라이브러리를 불러와서 사용한다. 
- 주소 정보는 Heap 영역에 할당되어 있다.

## Embed & Sign 

![스크린샷 2023-11-13 12.16.03](https://hackmd.io/_uploads/HJeWSGkEp.png)

> Xcode -> Project -> General

**Embed** 

- 앱의 번들 파일에 해당 프레임워크를 복사할 것이다를 의미한다.


**Embed & Sign**

- Dynamic Framework인 경우에 사용한다. 

**NOTE** 

> Framework를 앱 번들에 한번 복사하고 코드 사이닝을 실행하여 런타임 시에 프레임워크가 필요할 때 사용한다. 

**Do not Embed**

- Static Framework인 경우에 사용한다. 

**NOTE**

> Static Framework는 앱의 실행 파일(executable)에 포함되어 따로 번들에 참조할 필요가 없다.

