# 프레임워크와 라이브러리

# 프레임워크

정의

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미합니다.

  • 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것을 의미합니다.
  • 폴더명, 파일명 등에 대한 규칙이 있으며 라이브러리에 비해 좀 더 엄격합니다.
  • 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 구조를 제공하며, 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발합니다.
  • 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드들을 구현하면 됩니다.

# 예시

  • Java : Spring
  • JS,TS : Express.js, Nest.js, Angular, Vue.js
  • Python : Django, Flask
  • 안드로이드 : Android
  • IOS : Cocoa Touch
  • Ruby : Ruby on Rails

# 라이브러리

정의

소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모아둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미합니다.

  • 폴더명, 파일명 등에 대한 규칙이 없고 프레임워크에 비해 자유롭습니다.

# 예시

  • Java : JUnit, Jackson
  • Python : tensorflow, pandas, beautifulsoup
  • C++ : STL
  • JS : JQuery, React.js

근데 프레임워크 빼고 끌어다 쓰는 것 다 라이브러리라고 후려쳐도 될 듯

# 프레임워크, 라이브러리 차이점

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
프레임워크에는 분명한 [제어의 역전] 개념이 적용되어 있어야 한다.
애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작해야 한다.

  • 토비의 스프링中

정의

제어 흐름의 권한이 어디에 있는가. 라이브러리는 사용자가 직접 제어하고, 프레임워크는 애플리케이션의 코드가 프레임워크에 의해 사용됩니다.

# 제어의 역전

정의

제어의 역전(IoC, Inversion of Control)이란, 어떠한 일을 하도록 만들어진 Framework에 Control 권한을 위임하는 것을 의미하는데, 간단히 말해 프로그램의 제어 흐름 구조가 뒤바뀐 것을 뜻합니다.

  • 라이브러리의 경우 애플리케이션의 흐름을 사용자가 직접 제어해야 합니다.
  • 프레임워크의 경우 코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있습니다.

# 참고자료