# 프레임워크, 라이브러리, API의 차이는 무엇인가요?

* **Framework**
  * **정의** : 응용 프로그램이나 소프트웨어의 개발을 편리하게 하기 위해 제공된 소프트웨어 환경
  * 프레임워크에 의존하여 개발해야 하고, 프레임워크가 정의한 규칙을 준수해야한다.
  * **특징**
    * 상호헙력하는 클래스와 인터페이스의 집합
    * 응용 프로그램이 **수동적으로 프레임워크에 의해 사용된다.**
* **Library**
  * **정의** : 응용 프로그램 개발을 위해 필요한 기능(함수)들을 모아놓은 소프트웨어
  * **자주 사용하는 로직들을 재사용하기 편리하도록 만들어 놓은 코드의 집합이다.**
  * 라이브러리는 단일 파일로 구성된 코드의 집합인 **모듈**의 집합이다.
  * **특징**
    * 다른 라이브러리들과 독립성을 가진다.
    * 응용 프로그램이 **능동적으로 라이브러리를 사용할 수 있다.**
* **API(Application Programming Interface)**
  * **정의** : 응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
  * 응용 프로그램을 만드는데 필요한 연결장치, 매개체라고 할 수 있다.
  * 여러 큰 기업들에서 제공하는 OpenAPI를 활용하여 필요한 기능을 편리하게 사용할 수 있다.
  * **특징**
    * 구현과 독립적으로 사양만 정의되어 있다.
    * API에 따라 접근 권한이 필요할 수 있다.

**라이브러리 vs API**

* 구현 로직의 유무에 따라 갈린다.
  * **API** : 컴포넌트를 사용하는 규약 및 호출을 위한 수단으로, 구현 로직이 필요하지 않는다.
  * **라이브러리** : 컴포넌트 자체로, 구현 로직이 존재한다.
* **라이브러리**는 도구 자체라고 볼 수 있고, **API**는 도구를 달라고 요청하는 것이라고 볼 수 있다.

**라이브러리 vs 프레임워크**

* **가장 큰 차이는 응용 프로그램의 흐름 주도권을 누가 가지고 있느냐이다.**
  * **라이브러리** : 개발자가 라이브러리를 호출하여 사용하여 컨트롤한다.
  * **프레임워크** : 개발자가 프레임워크 규칙에 따라 코딩을 하면, 프레임워크가 내 코드를 호출해 컨트롤한다.

<br>

### 참고

* [참고 블로그](https://dkswnkk.tistory.com/517)
* [참고 동영상](https://www.youtube.com/watch?v=We8JKbNQeLo)
