특정한 형태 플랫폼의 어플리케이션을 개발할 때 사용되는 기반

소프트웨어 프레임워크는 개발자들이 거의 모든 소프트웨어 개발 프로세스를 제어할 수 있게 해주는 공통 플랫폼을 통해 개발을 더 쉽게 만들어준다.
(문법, 선언, garbage collection, 구문, 예외, 코딩, 디자인, 테스트 등 모든 것)
작업을 간단하게 만들어주기 위해 사용되는 미리 작성된 코드들의 모음
반복적으로 재사용되는 코드들의 모음

누가 누구를 부르냐 (Who's calling whom)

| 프레임워크 | 라이브러리 | |
|---|---|---|
| Definition | 특정 플랫폼을 위한 어플리케이션을 개발하는 기반 | 작업을 쉽고 빠르게 진행하기 위해서 이미 정의된 기능, 클래스들을 제공한다. |
| Inversion of Control | 제어가 역전되어서 프레임워크가 흐름과 개발자의 코드를 제어한다. | 개발자가 어플리케이션의 흐름과 라이브러리 호출을 제어한다. |
| Collection | 많은 API, 컴파일러, 툴셋, 보조 프로그램, 라이브러리 등을 포함한다. | 헬퍼 모듈, 객체, 클래스, 기능, 메세지 템플릿, 이미 작성된 코드의 모음 |
| Code Modification | 프레임워크가 제공하는 코드는 대체되거나 수정될 수 없다. | 특정 프로그램이나 구체적인 문제를 해결하기 위해 사용되기 때문에 니즈에 맞게 라이브러리 코드를 수정해야 한다. |
| Scope | 프레임워크에 속한 것은 해당 프레임워크 내에서만 호출, 사용 가능하다. | 컨텍스트 밖이라도 필요한 어느 곳에서든 호출 가능하다. |
| Extensibility | 일반적인 기능을 제공하기 때문에 확장 가능하고, 개발자가 프레임워크의 소스 코드 수정 없이 앱 한정적 기능들을 포할 수 있게 해준다. | 확장이 아닌 특정 목적을 위해 위해 디자인되었다. |
| Replaceable | 다른 프레임워크로 교체하기 어렵다. 전체 코드베이스를 다시 써야한다. | 다른 라이브러리로 교체하기 쉽다. |
| Performance | 프레임워크는 많은 코드로 이루어져있어서 로딩 시간이 오래 걸리고 성능도 낮아진다. | 라이브러리를 빌드하는데 더 적은 코드가 필요하기 때문에 빠른 로딩 시간과 더 좋은 성능을 가진다. |
| Usage | 웹 어플리케이션 시스템, 플러그인 매니저, GUI 시스템 등의 넓은 범위의 작업을 수행하는데 사용된다. | 이미지 처리, 네트워크 프로토콜, 수학 연산 등 정의된 구체적인 작업을 수행하는데 사용된다. |
| Existing Projects | 이미 존재하는 코드에 프레임워크를 적용시키는 것은 불가능하다. 대신 프레임워크는 새로운 프로젝트를 시작할 때 사용되어야 한다. | 기능이 더 필요할 때 이미 존재하는 프로젝트에 자연스럽게 라이브러리를 추가할 수 있다. |
| Benefits | 빠른 프로그래밍, 커뮤니티의 지원, MVC 패턴 지원 | 좋은 코드 퀄리티, 재사용성, 제어권, 빠른 프로그램 속도와 성능 |
| Examples | Spring, NodeJS, AngularJS, VueJS | JQuery, React JS |