# API (Application Programming Interface)
- 정의 : 응용프로그램에서 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
cf) 인터페이스 : 상호작용하는 공(경계) ex) 스마트폰에서는 터치스크린과 손가락, TV에서는 리모콘과 본체 버튼
- 특징
구현과 독립적으로 사양만 정의되어 있다.
(개발자가 원하는 기능을 만들기 위해서는 제공되는 사양을 통해 코드로 만들어주어야(구현) 한다
API에 따라 접근 권한이 필요할 수 있다.
ex) JAVA API, 여러 기업들(구글, 네이버 등)의 API
# Library
- 정의 : 응용 프로그램 개발을 위해 필요한 기능(함수)들을 모아놓은 소프트웨어
- 특징
독립성을 가진다.
(라이브러리는 다른 라이브러리에 의존하지 않는다)
응용 프로그램이 능동적으로 라이브러리를 사용한다.
(능동적 : 응용 프로그램이 "필요할 때", 라이브러리를 불러와서 사용한다.)
ex) Apache Commands, Guava, Lombok, jQuery
# Framework
- 정의 : 응용 프로그램이나 소프트웨어의 솔루션 개발을 수월하게 하기 위해 제공된 소프트웨어 환경
- 특징
상호협력하는 클래스와 인터페이스의 집합
응용 프로그램이 수동적으로 프레임워크에 의해 사용됨
(수동적 : 프레임워크에서의 작업 흐름 예시를 들면
[Framework]Client Requset 처리 -> [Framework]Request 처리할 controller mapping -> [개발자 코드 + Framework]개발자가 작성한 controller를 Framework가 호출해서 처리 )
ex) Spring Framework, Junit, Ruby on Rails
# API vs Library vs Framework
- Library와 API 차이
: 구현 로직의 유무
- Library와 Framework의 차이
: 응용 프로그램의 흐름 주도권을 누가 가지고 있는지 (Library는 개발자, Framework는 Framework)
: 자동차를 만든다고 가정할 때,
자동차의 일부 부품은 Library에서 가져와서 구성
자동차 제작 전에 미리 주어지는 기본적인 자동차 뼈대는 Framework가 제공 (Framework = 뼈대 + 일하다)
출처 : 우아한Tech 영상 참고
https://www.youtube.com/watch?v=We8JKbNQeLo&t=26s