JAVA
[JAVA] - 프로그래밍에서 프레임워크와 라이브러리의 차이점
nam_ji
2023. 9. 13. 17:07
사전적 정의
- 프레임워크
컴퓨터 프로그래밍에서, 소프트웨어 프레임워크(software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한다. -위키백과 - 라이브러리
라이브러리는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴, 클래스, 값, 자료형 사양을 포함할 수 있다 - 위키백과
간단한 정의
- 프레임워크
집을 짓기 위한 과정을 라이브러리와 프레임워크에 비유해보면, 프레임워크는 모델하우스를 짓는것에 비유할 수 있다. 모델하우스의 소파의 위치, 의자와 책상의 위치, 방의 용도 등. 우리가 수정할 수 있는 범위는 제한적이다. 주방의 위치, 기둥의 개수, 방의 개수 등 집을 이루고있는 굵직한 뼈대는 수정할 수 없다. 사용자는 모델하우스가 제공하는 청사진 안에서"만" 움직일 수 있다. 프레임워크가 제공하는 틀에 따라 코드를 작성해야 하는것이다. 즉, 통제권은 사용자가 아닌 프레임워크가 쥐고 있다.
- 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
- 제어역전
프레임워크와 라이브러리를 리서치, 검색하다보면 "제어역전" 이라는 개념이 계속해서 나온다.
제어역전이란, 개발자가 해왔던 일(제어)을 프로그램. 즉, 프레임워크가 대신 해준다는 의미이다. 스프링과 같은 프레임워크를 사용하다보면, 스레드를 직접 만들고, 객체의 생명주기를 직접 코딩하진 않는 것 처럼. 원래 개발자가 가지고 있어야 할 객체의 제어권을 프레임워크가 대신 해준다는 의미로,
"제어권이 역전되었다" 라는 뜻에서 제어역전 이라고 한다.
결론
- 프레임워크와 라이브러리는 둘 다 코드 작성에 도움이 되는 타인이 작성한 코드의 집합이다.
- 프레임워크는 프로그램이 필요한것을 개발자에게 알려줌으로써 제어권을 역전하고, 라이브러리는 개발자가 필요할 때 마다 설치, 혹은 호출함으로써 개발자가 능동적으로 사용하게 된다.