Framework vs Library vs API

포함관계
프레임워크 (Framework)
단어가 가진 의미 그대로 뼈대 역할을 한다.
개발자가 코드를 작성하여 애플리케이션을 완성한다.
기본적인 뼈대가 완성되어 있고 규칙이 존재하는 개발 환경
공통적인 개발 환경을 제공한다.
제공되는 개발 환경에서만 개발할 수 있으므로 제한이 발생한다.
개발 구조나 규칙, 라이브러리 및 도구 모음
일반적으로 사용하는 라이브러리들이 포함되어 있어 애플리케이션을 빠르게 개발할 수 있다.
코드를 재사용하여 개발 시간을 단축하고 일관성 있는 코드를 작성할 수 있다.
데이터베이스 연결을 단순화하고 네트워크 트래픽 및 캐싱에 최적화된 프로세스를 제공한다.
제어의 역전(IoC, Inversion of Control)이 발생한다.
프레임워크가 전체적인 흐름을 제어한다.
사용자는 그 흐름 안에서 필요한 코드만 작성하면 되므로 신경 써야 하는 코드가 줄어든다.
예시
Java: Spring, JUnit
Typescript: Angular
Python: Django
PHP: Laravel
라이브러리 (Library)
개발 시 재사용할 수 있는 기능들을 모아 모듈화한 것
환경은 없고 의도와 목적만 있다.
사용자가 직접 코드의 흐름을 제어한다.
필요한 코드를 원하는 곳에 호출해서 사용한다.
다양한 상황과 환경에 대해 사전 테스트 된 코드를 제공한다.
라이브러리 개발자의 지원이 부족하면 새로운 버전에 대한 호환성 문제가 발생할 수 있다.
지원되지 않는 환경에서 사용하면 래퍼가 필요해서 애플리케이션 성능에 영향을 미칠 수 있다.
애플리케이션 구축 비용을 절감할 수 있다.
라이브러리를 사용하면 코드가 해당 라이브러리에 종속된다. 새로운 라이브러리로 전환하려면 코드를 변경해야 할 수 있다.
라이브러리 간에 충돌이 발생하여 애플리케이션 성능이 저하될 수 있다.
라이브러리에 공격자가 악용할 수 있는 보안 취약점이 있다.
예시: React, JQuery, AssertJ
API (Application Programming Interface)
다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙을 정의한 문서
응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
프로그램과 프로그램간에 상호작용을 돕는 시스템
예시
Web API: RESTful API, 기상청 API
소셜 미디어 API: Facebook Graph API, Twitter API
클라우드 서비스 API: Amazon Web Service(AWS) API, Google Cloud Platform(GCP) API, Ncloud API
데이터베이스 API: JDBC
집 짓는 과정을 통해 알아보는 차이점
프레임워크: 모델하우스, 평면도, 청사진
주방이나 현관 위치, 방 개수, 기둥 위치 등 집 구조
건설사에서 설계한 그대로 사용해야 하며 사용자가 변경할 수 없다.
라이브러리: 가구, 전자제품, 공구
이미 설계된 구조(뼈대) 안에서 자유자재로 인테리어를 한다.
어떤 가구와 재료들을 사서 조립하고 배치할 것인지 사용자에게 권한이 있다.
API: 리모컨, 원격제어 장치
프로그램들을 제어하여 원하는 결과를 얻는다.
Reference
https://www.youtube.com/watch?v=_j4u4ftWwhQ
https://cocoon1787.tistory.com/745
https://velog.io/@whitecloud94/프레임워크-vs-라이브러리
https://www.youtube.com/watch?v=yKEwNVbAFC0
https://www.baeldung.com/cs/framework-vs-library
https://webclub.tistory.com/458
https://www.geeksforgeeks.org/software-framework-vs-library
https://anarsolutions.com/libraries-vs-frameworks
https://tibetsandfox.tistory.com/13

[Kotlin] 프로그래머스 - 공원 산책
프로그래머스 코딩테스트 문제 공원 산책 풀이
Kotlin

Code Refactoring (코드 리팩터링)
Code Refactoring (코드 리팩터링)
Technique
