API(Application Programming Interface)
API는 응용프로그램에서 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.
쉽게 말해 프로그램 사이를 연결해주는 다리역할을 합니다.
예를 들어 위치공유 프로그램을 개발하고싶은데, 직접 지도서비스를 개발하기엔 시간과 비용이 많이들어 타사의 서비스를 사용하겠다.
라고 한 경우 Google의 지도서비스를 생각할 수 있습니다.
Google의 지도 서비스를 사용하려면 API를 호출해야합니다.
https://map.google.com/37.2318&26.138
이런식으로 호출을 하게되면 Google지도서비스는 내 프로그램에게 지도와 관련된 정보를 전달해주게 될 겁니다.
여기서 https://map.google.... 는 "위치공유 프로그램", "Google지도서비스" 사이를 이어주는 다리역할을 하고있습니다.
이 "다리역할"을 하는게 API입니다.
Framework(프레임워크)
프레임워크는 개발자에게 구조와 형태를 제공하는 "뼈대"역할을 합니다.
개발자는 프레임워크가 제공하는 뼈대 위에 코드를 작성하여 개발하게됩니다.
예를들면 iOS에선 UIKit프레임워크가 제공하는 특정 메서드, 클래스를 상속, 오버라이딩을 해서 개발하게됩니다.
프레임워크의 주 목적은 생산성입니다.
개발자는 프레임워크에서 제공하는 코드만큼의 코드를 덜 작성하게됩니다.
또한 많은 개발자가 하나의 프로젝트를 진행한다면 코드의 통일성이 낮아져 가독성과 유지보수성이 떨어지게 됩니다.
개개인이 코드를 작성하는 스타일, 버릇이 다르기 때문입니다.
물론 프레임워크 없이도 개발 할 수 있습니다.
만약 UIKit프레임워크가 없다면 우리가 수 많은 UIKit 컴포넌트들을 직접 만들어야 할 것입니다.
할 능력과 시간만 있다면.. 할 수 있습니다.
Library(라이브러리)
라이브러리는 소프트웨어 개발에 필요한 특정 기능을 위해 작성한 코드, 함수들의 집합입니다.
독립성을 가진다고 하는데 여기서 독립성은?
"한 라이브러리는 다른 라이브러리를 의존하지 않는다" 라는 의미입니다.
또한
"응용프로그램이 능동적으로 라이브러리를 사용한다." 라는 특징이 있는데,
즉 "우리가 필요할 때 가져와서 사용한다." 입니다.
이게 프레임워크와 라이브러리의 가장 큰 차이입니다.
프레임워크와 라이브러리의 차이
둘의 차이는 Flow(흐름)의 주도성이 누구에게 있냐. 입니다.
"누가 누굴 컨트롤 하는가?" 를 보면 알 수 있습니다.
내가 필요로 할 때 snapkit을 호출해서 사용한다. == 라이브러리
코드를 작성할 때 우린 필요한 곳에 필요한 것들을 가져와서 실행시킵니다.
흐름의 주체가 내 코드에게 있으면 라이브러리입니다.
반면에 프레임워크는 전체적인 흐름 제어의 주도권이 스스로에게 있습니다.
이를 제어의 역전(IoC, Inversion of Control이라고 합니다.
이는 프레임워크가 개발자의 코드를 호출한다는 의미입니다.
UIKit를 생각해보면 Interface 구현, 상속, delegate를 통해 개발자의 코드를 호출하게됩니다.
viewDidLoad, layoutSubViews, UITableViewDelegate...등등
그래서 라이브러리는 "내가" 호출하는 반면에
프레임워크는 "프레임워크"가 내 코드를 호출하게됩니다.
또한 우리는 프레임워크 위에서 코드를 작성할 때 규칙따라야합니다.
프레임워크는 규칙을 정의하고, 내가 규칙을 정하지 않습니다.