먼저 내가 알고 있는 프레임워크란?

라이브러리보다 규모가 좀 더 큰 라이브러리+@(?)의 집합체. 라이브러리는 클래스, 함수들의 집합인 느낌. 프레임워크는 라이브러리, 이미지, 기타등등? 개발하기 위한 모든 요소들이 포함되어 있고 사용자(개발자)는 해당 프레임워크에서 제공해주는데로 강제성(?)이 있게 사용해야 함. 반면, 라이브러리는 단순하게 내가 사용하고 싶을 때, 사용할 수 있음. (있어보이는 용어로 설명을 했던 거 같은데 ... 수동능동? 뭐였지)

<aside> 💡 inversion of control (있어빌리티) 제어역전!

</aside>

Xcode에서 우리가 사용하는 UIKit은 프레임워크이다. 딱 봐도 뭐가 많다. 정확하지는 않지만 스토리보드도 아마 포함되었던가?(아님 IDE에 포함된 개발도구). UI에 관련된 기능들이 많이 들어있고 개발자는 해당 프레임워크에서 정의된? 방식대로 작업을 진행해야함.

프레임워크

라이브러리는 집이 있는 상태로 이케아에 가는 것과 비슷하다. 가서 원하는 가구를 사고 원하는 장소에 배치할 수 있다. 프레임워크는 집을 만들 수 있게 해준다. 단, 집은 프레임워크에서 제공해주는 설계도 방식으로만 만들 수 있다.

즉, 어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 달려 있습니다. 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣으며 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있습니다.

제어의 역전 이란 어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경 써야 할 것을 줄이는 전략입니다.

제어의 역전에 사용되는 방법에는 delegate pattern, interface, abstract(추상클래스) 개발자가 구현, 상속 후 프레임워크에 전달, "이는 객체를 프레임워크에 주입하는 것이고, 이를 의존을 주입 dependency injection"

Dynamic & Static

Overview: iOS Static and Dynamic Frameworks and Libraries

&ref