API
- Application Programming Interface
Interface
하나의 시스템을 구성하는 두 개의 구성요소가 상호 작용을 하기 위해 필요한 경계가 필요함
인터페이스는 이 경계에서 각 구성요소가 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 포괄적으로 가리키는 말
EX) 티비 - 리모컨 - 사용자
TV를 조정하기위해 리모컨을 사용
TV와 사용자 사이의 매개체로서 인터페이스 역할을 함
- 응용프로그램에서 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 프로그램 사이를 연결해주는 다리
API EX)
사용자끼리 맛집을 공유하는 서비스
- 지도에 위치를 찍어 공유
- 지도를 만들기에는 너무 어렵고 / 시간도 오래걸림
➡ Google의 지도 서비스를 이용
API 특징
- 구현과 독립적으로 사양만 정의되어 있음
- 구현이 아닌 제어를 담당
- API에 따라 접근 권한이 필요할 수 있음
- JAVA API, 여러 기업들의 오픈 API
EX) 구글 API (https://console.cloud.google.com)
Framwork / Library의 탄생
1) 디자인 패턴
- 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결방법
- 실무 컨텍스트에서 유용하게 사용해왔고, 다른 실무 컨텍스트에서도 유용할 것으로 예상되는 아이디어
디자인 패턴의 목적
- 설계를 재사용하는 것
➡ 실제로 적용하려면 코드를 작성해야함
➡ 코드는 재사용할 수 없음
2) 컴포넌트 조립방식
- 소프트웨어의 단위를 컴포넌트로하고, 기존에 만들어두었던 컴포넌트를 조립하여 새로운 어플리케이션을 만드는 것
- 즉, 새로운 코드를 작성하지 않고, 기존에 만들었던 것으로만으로 새로운 어플리케이션을 만들겠다는 것
➡ 실패
WHY?
- 현실세계에 있는 해걀해야 할 문제들인 도메인 영역들은 굉장히 다양함
- 각각의 도메인들은 자기만의 특수성을 가지고있기 때문에 자기만의 최적화된 로직이 필요함
- 다양한 도메인들을 포괄할 수 있는 컴포넌트를 만들 수 없었음
1) 설계만 재사용하는건 아쉬움
2) 코드만 재사용하는건 안 됨
➡ 특정 기능들에대해 코드를 재사용 하자 (라이브러리)
➡ 설계 재사용과 코드 재사용을 적절한 수준으로 조합 (프레임워크)
Library
- 응용 프로그램 개발을 위해 필요한 기능(함수)을 모아 놓은 소프트웨어
- 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임 (= 기능모음)
➡ 개발자가 사용할 수 있는 API들을 종류나 목적에 따라 나누어 정의한 API 묶음 ( == 재사용 가능한 코드의 집합)
- 기본 라이브러리 : 시스템에 기본적으로 설치되어 있는 라이브러리
- 확장 라이브러리 : 제조사나 외부 메이커에 의해 만들어지는 라이브러리
Library 특징
- 독립성을 가짐 ➡ 해당 라이브러리는 다른 라이브러리에 의존하지 않음
- 응용 프로그램이 능동적으로 라이브러리를 사용
- Apache Commons, Guava, Lombok, jQuery
능동적이란?
EX) 학생들의 성적의 평균을 계산하는 프로그램
1. 학생들의 성적이 담긴 문자열을 입력 받음
2. 필요한 라이브러리를 호출해서 원하는 값을 얻음
= 문자열을 파싱하여 원하는 값인 성적의 평균을 반환하는 라이브러리를 사용
String scores = "홍길동:80, 김철수:15, 김영희:75";
double average = library.calculate(scores); //라이브러리 호출
return average;
- 응용프로그램이 라이브러리가 필요할 때 능동적으로 호출
Framework
- Frame (틀, 뼈대) + work (일하다) = 틀 안에서 일을 한다
- 응용 프로그램이나 소프트웨어의 솔루션 개발을 수월하게 하기 위해 제공된 소프트웨어 환경
- 추상클래스나 인터페이스를 정의하고 인스턴스들의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한 설계
- 애플리케이션 개발자가 현재 요구사항에 맞게 커스터마이징 할 수 있는 애플리케이션의 골격
➡ 애플리케이션을 개발할 때에 빈번히 쓰여지는 범용 기능을 한꺼번에 제공하여, 애플리케이션의 토대로서 기능하는 소프트웨어
⭐ 프레임워크를 이용하면 독자적으로 필요로 하는 부분만을 개발하면 되기 때문에 개발 효율의 향상을 기대할 수 있음
Framework의 특징
- 상호협력하는 클래스와 인터페이스의 집합
- 공통적인 개발환경을 제공 (개발 편의성 ⬆, 협업할 때 통일된 형태의 개발을 할 수 있음)
- 개발할 수 있는 범위가 정해져있음 (단점이 될 수 있음)
- 응용 프로그램이 수동적으로 프레임워크에 의해 사용됨
- Spring Framework, Junit, Ruby on Rails
수동적이란?
EX) Spring Framework
- Client의 Request를 처리
- Request를 처리할 컨트롤러 매핑
- 개발자가 작성한 컨트롤러를 호출해 수행
라이브러리는 응용 프로그램의 코드에서 라이브러리를 호출
↔
프레임워크에서는 프레임워크가 할 일을 다 한 후 개발자가 작성한 비즈니스 로직을 호출
Framework가 코드를 통해 설계를 재사용할 수 있었던 이유
- 프레임워크가 어플리케이션을 제어하기 때문
- 객체간의 상호작용을 프레임워크가 담당하기때문에 설계를 재사용할 수 있었음
== 프레임워크 : 객체의 생성, 관계사용, 생명주기들을 제어
== "제어가 역전되었다"
API vs Library vs Framework
Library 와 API 의 차이점
- 구현 로직의 유무
Library 와 FrameWork의 차이점
- 응용 프로그램의 흐름 주도권을 누가 가지고 있는지
Framework | Library | |
공통점 | 재사용과 관련이 있음 | |
목적 | 설계 재사용 (일부 코드 재사용) |
코드 재사용 |
제어 흐름 | 프레임워크 ⬇ 개발 코드 |
개발 코드 ⬇ 라이브러리 |
쓰임새 | 범용적 | 특정 영역에서 강력 |
참고문헌
1) [10분 테코톡] 🙆♀️티버의 API vs Library vs Framework