CS

[12/29] API vs Library vs Framework

콩스프 2022. 12. 29. 21:02

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

2) [10분 테코톡] 🌳임루트의 프레임워크 vs 라이브러리 vs API

3) [10분 테코톡] 📢 욘의 프레임워크 vs 라이브러리 vs API