API vs Library vs Framework
API
- Application programming interface
- 응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- Application: 운영 체제를 제외한 나머지 소프트웨어
- Interface: 하나의 시스템을 구성하는 2개의 구성 요소가 상호 작용하기 위해선 경계가 필요. 이 경계에서 각 구성요소가 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 포괄적으로 가리키는 말
API의 특징
- 구현과 독립적으로 사양만 정의됨
- API에 따라 접근 권한이 필요할 수 있음
- Java API 등 여러 기업들의 오픈 API가 존재
API의 종류
- 접근 방식에 따라 3가지로 분류
- Private API : API를 기업이나 연구 단체 등에서 사용하는 다양한 애플리케이션과 시스템의 통합을 위해 사용하는 것으로 단체 내부에서만 사용할 수 있도록 하는 것
- Partner API : API를 특정 비즈니스 파트너와 공유하는 것으로, 공유받은 API를 품질 저하 없이 사용할 수 있으며 수익 창출을 목표로 사용하는 것
- Public API : 모든 사람들에게 API를 제공하는 것으로, 개인이 API와 상호작용하는 프로그램을 무료로 개발할 수 있음.
Library
- 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임(기능 모음)
Library의 특징
- 독립성을 가짐
- 응용 프로그램이 능동적으로 라이브러리를 사용
- Apache Commons, Guava, jQuery 등
Framework
- 추상 클래스나 인터페이스를 정의하고 인스턴스 사이의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한 설계
- 응용 프로그램이나 소프트웨어의 솔루션 개발을 수월하게 하기 위해 제공된 소프트웨어 환경
Framework의 특징
- 상호협력하는 클래스와 인터페이스의 집합
- 응용 프로그램이 수동적으로 프레임워크에 의해 사용됨
Library vs Framework
등장 배경
- 설계 재사용을 강조하는 디자인 패턴으로는 코드를 재사용할 수 없음
- 디자인 패턴: 반복적으로 발생하는 문제를 어떻게 해결할지에 대한 솔루션
- 코드 재사용의 끝판왕인 컴포넌트 조합 방식은 실패(각 어플리케이션마다 도메인이 달라지기 때문에 최적화가 불가능)
Library, Framework의 차이
- 라이브러리: 특정 기능들에 대한 코드 재사용
- 프레임워크: 설계 재사용, 코드 재사용을 적절한 수준으로 조합. 코드를 재사용함으로써 설계 아이디어를 재사용
제어의 역전
- 라이브러리: 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용하는 것을 의미
- 프레임워크: 프레임워크가 객체의 생성, 관계 설정, 사용, 생명주기 등을 제어
Reference