✏️ 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 뼈대를 의미한다.
제어의 역전 개념이 적용되었다.
- 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발합니다.
- 즉, 개발자는 프레임워크가 짜놓은 구조 안에서 필요한 코드를 작성하는 방식으로 프로그램을 개발한다.
- 필요한 개념들이 추상화된 여러 클래스나 컴포넌트로 구성되어 있다.
- 예시
- Java 서버 개발에 사용되는 Spring
- Python 서버 개발에 사용되는 Django, Flask
- 안드로이드 앱 개발에 사용되는 Android
- 아이폰 앱 개발에 사용되는 Cocoa Touch
- 웹 개발에 사용되는 Angular, Vue.js 등
- 자바 기반의 JSP를 위한 프레임 워크 Struts
- 루비로 작성된 MVC패턴을 이용하는 Ruby on Rails
✏️ 소프트웨어를 개발할 때 필요한 도구들의 모임.
특정 기능의 코드들, 함수들의 집합이며, 개발자들이 필요시 호출하여 사용한다.
제어의 역전 개념이 적용되지 않는다.
- 개발자가 프로그램 개발시 필요한 기능가 있을 경우 해당 라이브러리를 호출하여 사용한다.
- 예시
- Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등등)
- C++의 표준 템플릿 라이브러리 (STL)
- Node.js에서 npm으로 설치한 모듈
- HTML의 클라이언트 사이드 조작을 단순화하는 JQuery
- 웹에서 사용자 인터페이스 개발에 사용되는 React.js
프레임워크와 라이브러리의 차이점은 제어 흐름(Flow)의 주도권(권한)이 누구에게(어디에) 있는 가에 있다.
✏️ 제어의 역전(IoC, Inversion of Control)이란
프로그램의 제어 흐름 구조가 뒤바뀐 것을 의미한다.
프레임워크는 개발자가 아닌 프레임워크가 흐름의 주도권을 가지고 있기에 제어의 역전이 일어났다고 할 수 있다.
프레임워크는 전체적인 흐름의 주도권을 스스로 가지고 있다. 개발자는 프레임워크의 흐름 안에서 필요한 코드를 작성하는 방식으로 개발한다.
반면 라이브러리는 흐름의 주도권을 가지고 있지 않다. 개발자가 전체적인 흐름의 주도권을 가지고 있고, 필요한 기능이 있다면 관련 라이브러리를 호출하여 사용하는 방식으로 개발한다.