프레임 워크와 라이브러리의 차이점은 무엇입니까? [닫은]


865

프레임 워크라이브러리 의 차이점은 무엇입니까 ?

나는 항상 라이브러리를 특정 문제 또는 특정 응용 프로그램 개발 영역 (예 : 데이터베이스 액세스)을 해결하는 데 중점을 둔 일련의 객체 및 함수로 생각했습니다. 반면에 특정 방법론 (예 : MVC)을 중심으로하고 응용 프로그램 개발의 모든 영역을 다루는 라이브러리 모음으로서의 프레임 워크.


18
@ vba4all : 처음 요청했을 때 어떻게 중복 될 수 있습니까?
멍청한 놈 사이 보트

5
처음에 만들어
졌다고


3
@tuple_cat 실제로 귀하의 링크는 중복 된 것 같습니다 :이 질문 이후에 요청되었습니다
chharvey

1
우리는 몇 가지 기능이 필요합니다. 라이브러리라고 부릅니다. 프레임 워크와 프레임 워크 호출 코드 (예 : UIKit)에 도움이되는 기능이 필요합니다.
Kamleshwar

답변:


350

실제로 이러한 용어는 사용되는 컨텍스트에 따라 많은 다른 의미를 가질 수 있습니다.

예를 들어, Mac OS X에서 프레임 워크는 번들로 묶인 라이브러리 일뿐입니다. 번들 안에 실제 동적 라이브러리 (libWhatever.dylib)가 있습니다. Bare 라이브러리와 Mac의 프레임 워크의 차이점은 프레임 워크에 여러 버전의 라이브러리가 포함될 수 있다는 것입니다. 여기에는 추가 리소스 (이미지, 지역화 된 문자열, XML 데이터 파일, UI 개체 등)가 포함될 수 있으며 프레임 워크가 공개되지 않은 경우 일반적으로 라이브러리를 사용하는 데 필요한 .h 파일이 포함됩니다.

따라서 단일 패키지 내에 응용 프로그램에서 라이브러리를 사용해야하는 모든 것이 있습니다 (.h 파일이없는 C / C ++ / Objective-C 라이브러리는 라이브러리 설명서에 따라 직접 작성하지 않는 한 매우 쓸모가 없습니다). 많은 파일 이동 (Mac 번들은 Unix 레벨의 디렉토리 일 뿐이지 만 UI는 JAR 파일이 Java에 JAR 파일이 있고 클릭하면 일반적으로 표시되지 않는 것처럼 단일 파일처럼 취급합니다 내용을 표시하도록 명시 적으로 선택하지 않는 한 내부 내용).

Wikipedia는 프레임 워크를 "버즈 워드"라고 부릅니다. 소프트웨어 프레임 워크를 다음과 같이 정의합니다.

소프트웨어 프레임 워크는 소프트웨어 시스템 (또는 서브 시스템)에 재사용 가능한 디자인입니다. 소프트웨어 프레임 워크에는 지원 프로젝트, 코드 라이브러리, 스크립팅 언어 또는 소프트웨어 프로젝트의 여러 구성 요소를 함께 개발하고 접착하는 데 도움이되는 기타 소프트웨어가 포함될 수 있습니다. 프레임 워크의 다양한 부분이 API를 통해 노출 될 수 있습니다.

그래서 저는 도서관이 바로 "도서관"이라고 말하고 싶습니다. 객체 / 기능 / 메소드 (언어에 따라 다름)와 응용 프로그램이 "링크"로되어있어 객체 ​​/ 기능 / 메소드를 사용할 수 있습니다. 기본적으로 재사용 가능한 코드가 포함 된 파일이며 일반적으로 여러 응용 프로그램간에 공유 할 수 있습니다 (동일한 코드를 반복해서 쓸 필요는 없음).

프레임 워크는 응용 프로그램 개발에 사용하는 모든 것이 될 수 있습니다. 라이브러리, 많은 라이브러리 모음, 스크립트 모음 또는 응용 프로그램을 만드는 데 필요한 소프트웨어가 될 수 있습니다. 프레임 워크는 매우 모호한 용어입니다.

다음은 " Library vs. Framework " 주제에 관한 기사 입니다. 나는 개인적으로이 기사가 논쟁의 여지가 있다고 생각합니다. 그가 말한 것은 잘못이 아니지만 프레임 워크의 여러 정의 중 하나를 골라 라이브러리의 고전적인 정의와 비교합니다. 예를 들어 그는 서브 클래 싱을위한 프레임 워크가 필요하다고 말합니다. 정말? 라이브러리에 객체를 정의하고 객체에 링크하여 코드에서 하위 클래스로 만들 수 있습니다. 나는 그것을 위해 "프레임 워크"가 어떻게 필요한지 알지 못한다. 어떤면에서 그는 오늘날 프레임 워크라는 용어가 어떻게 사용되는지 설명합니다. 내가 전에 말했듯이 그것은 단지 과장된 말입니다. 일부 회사는 일반 라이브러리 (클래식 라이브러리의 의미에서) 만 공개하고 더 멋진 소리로 "프레임 워크"라고 부릅니다.


2
2008 년 위키 백과의 기사에서 "프레임 워크"는 "버즈 워드"라고 설명했습니다.
Zebrafish

2
프레임 워크 인 IMO는 "빈"프로젝트 환경입니다.
Kulvar

514

라이브러리 를 수행 특정, 잘 정의 된 작업.

프레임 워크는 응용 프로그램이 골격을 작성하여 작업의 "고기"를 정의하는 골격이다. 골격에는 여전히 부품을 연결하는 코드가 있지만 가장 중요한 작업은 응용 프로그램에서 수행됩니다.

라이브러리의 예 : 네트워크 프로토콜, 압축, 이미지 조작, 문자열 유틸리티, 정규식 평가, 수학. 작업은 독립적입니다.

프레임 워크의 예 : 웹 애플리케이션 시스템, 플러그인 관리자, GUI 시스템. 프레임 워크는 개념을 정의하지만 응용 프로그램은 최종 사용자가 관심을 갖는 기본 기능을 정의합니다.


10
실제 예는 +1입니다. Btw, "웹 응용 프로그램 시스템"의 의미를 분명히 밝히시겠습니까?
Pacerier

3
@Pacerier 아마도 Rails for Ruby 또는 Sails for Node.js와 같은 완전한 웹 애플리케이션을 만들 수있는 것입니다.
gustavohenke

좋은 대답입니다. iOS 프레임 워크 및 라이브러리와 관련된 예제를 더 제공 할 수 있습니까?
NSPratik

마감일이있는 완벽 주의자를위한 웹 프레임 워크 인 장고 (Django).
airstrike

2
나는 '고기'보다는 '근육'으로 골격을 채울 생각입니다. 나는 '근육'이 운동의 골격을 설정하고 있기 때문에 더 정확한 유추라고 생각합니다.
altgov3en

290

가장 큰 차이점은 프레임 워크가 " 할리우드 원칙 "을 따르는 것입니다. 즉 "전화하지 마십시오. 전화하겠습니다."

Martin Fowler 에 따르면 :

라이브러리는 기본적으로 당신이 호출 할 수있는 함수의 집합이며, 요즘은 일반적으로 클래스로 구성. 각 호출은 일부 작업을 수행하고 클라이언트에게 제어권을 반환합니다.

프레임 워크 에 내장 된 더 행동 몇 가지 추상적 인 디자인을 구현한다. 당신은 서브 클래스로 또는 자신의 클래스에 연결하여 두 프레임 워크의 다양한 장소에 당신의 행동을 삽입 할 필요가 그것을 사용하기 위해. 그런 다음 프레임 워크의 코드는이 시점에서 코드를 호출합니다.


2
@Panos 설명해 주셔서 감사하지만 정교 할 수 있습니다. 예를 들어 FacebookSDK 프레임 워크를 사용하고 있으며이 프레임 워크에서 클래스 메서드를 호출하고 있습니다. FacebookSDK 프레임 워크는 내 코드에서 아무 것도 호출하지 않습니다. 이는 "우리에게 전화하지 마십시오. 우리에게 전화하겠습니다"라는 정의와 반대입니다.
Charles Robertson

4
@CharlesRobertson AFAIK FacebookSDK는 클라이언트 라이브러리입니다. 프레임 워크로 분류 할 수 없으며 그 이유는 분명합니다 (이미 알 수 있듯이). FacebookSDK는 클라이언트 코드에서 아무것도 호출하지 않습니다. 또한 Facebook SDK를 다음과 같이 정의 합니다. "소셜 플러그인, Facebook 로그인 및 그래프 API 호출을 추가하기위한 다양한 클라이언트 측 기능." 프레임 워크에 대한 표시가 없습니다 ...
Panos

1
@Panos 감사합니다. FacebookSDK를 나타내는 여행 가방 아이콘이 약간 오도 된 것 같습니다. 그리고 이름은 'FacebookSDK.framework'입니다. Facebook은 이름을 'FacebookSDK.dylib'와 같이 바꾸어야합니까? 그러나 이것을 명확히 해 주셔서 감사합니다. 올바른 정의가 무엇인지 아는 것이 좋습니다.
Charles Robertson

흥미로운 정의입니다. 최근에 d3.js를 사용하기 시작했으며 일반적으로 프레임 워크로 간주됩니다. 그러나 내가 쓴 d3 코드는 일반적인 자바 스크립트 코드 내에 있으므로이 정의를 d3으로 확장 할 수 없습니다.
Dileep Kumar Patchigolla

1
@Dileep d3.js 홈페이지 는 첫 문장에서 "D3.js는 데이터를 기반으로 문서를 조작하기위한 JavaScript 라이브러리"입니다. 프레임 워크로 간주되는 것은 잘못이라고 생각합니다.
Panos 2019

243

도서관에 전화하십시오.

프레임 워크가 전화합니다.


図 書館 助 け
足 場 が 痛 い
多 く の 涙


12
이것을 하이쿠로 리팩터링 할 수 있습니까?
Derek Tomes

18
@ DerekTomes BTW : 나는 haiku 양식을 추가했습니다 .
Ian Boyd

56
귀하의 답변은 META 에서 논의 중 입니다. 하이쿠를 번역 하시겠습니까? 나는 우리 중 상당수가 그것이 실제로 도서관 이 도움이되는지 , 발판이 아프고, 구글 번역가가 아주 좋아하는 많은 눈물 을 의미하는지 궁금해하고 있다고 생각 합니다 :)
Bugs

27
모드가 처음 두 개의 주석을 삭제하지 않은 것을 확인하는 것이 좋습니다. 이제 일본어 텍스트가 추가 된 이유 (농담으로 요청 됨)는 실제 대중적인 일본 시가 아니라 번역하려는 시도에 불과했습니다.
Zanon

9
소비에트 러시아에서는 프레임 워크가 당신을 부릅니다.
Robert Moore

242

도서관:

그것은 단지이다 콜렉션루틴 (함수 프로그래밍) 또는 클래스 정의 (객체 지향 프로그래밍). 그 이유는 단순히 코드 재사용입니다 . 즉, 이미 다른 개발자가 작성한 코드를 가져옵니다. 클래스 또는 루틴은 일반적으로 도메인 특정 영역에서 특정 작업을 정의 합니다 . 예를 들어, 개발자가 알고리즘 작동 방식의 구현을 다시 실행하지 않고도 함수를 호출 할 수있는 일부 수학 라이브러리가 있습니다.

뼈대:

프레임 워크에는 모든 제어 흐름 이 이미 있으며 코드로 채워야미리 정의 된 흰 반점 이 많이 있습니다 . 프레임 워크는 일반적으로 더 복잡합니다. 그것은 해골 정의 응용 프로그램이 골격을 채우기 위해 자신의 기능을 정의합니다. 이런 식으로, 적절한 경우 프레임 워크에서 코드를 호출합니다. 이점은 개발자가 디자인이 좋은지 아닌지 걱정할 필요가없고 도메인 특정 기능을 구현하는 것만 걱정할 수 있다는 것입니다.

라이브러리, 프레임 워크 및 코드 이미지 표현 :

라이브러리, 프레임 워크 및 코드 이미지 관계

키 차이 :

라이브러리와 프레임 워크의 주요 차이점은 "제어의 반전" 입니다. 라이브러리에서 메소드를 호출하면 제어 할 수 있습니다. 그러나 프레임 워크를 사용하면 제어가 반전됩니다. 프레임 워크가 호출합니다 . 출처.

관계:

둘 다 프로그래머가 사용할 API를 정의했습니다. 이를 결합하기 위해 라이브러리를 애플리케이션의 특정 기능으로, 프레임 워크를 애플리케이션의 골격으로 생각하고 API를 연결하는 API를 생각할 수 있습니다. 일반적인 개발 프로세스는 일반적으로 프레임 워크로 시작하고 API를 통해 라이브러리에 정의 된 함수를 채 웁니다.


14
제어 역전 심층 설명!
Patricia

3
그림과 같이 프레임 워크가 라이브러리를 번들로 묶기 때문에 사람들이 혼란스러워하는 이유를 보여줍니다.
Didier A.

1
@didibus 답변이 좋은 설명을 제공한다고 생각되면 게시물 시청자가 유익한 답변을 쉽게 찾을 수 있도록 답변을 상향 조정할 수 있습니다.
Durai Amuthan.H

FFmpeg (프로그램이 아니라 주로 프로젝트의 LibAVUtil)는 프레임 워크이며 libavcodec 등은 라이브러리입니까?
MarcusJ

1
@MarcusJ-LibAVUtil 및 libavcodec 모두 라이브러리입니다
Durai Amuthan.H

110

항상 설명했듯이 :

라이브러리는 도구입니다.

프레임 워크는 삶의 방식입니다.

도움이되는 작은 부분을 사용할 수있는 라이브러리입니다. 전체 프로젝트를 커밋해야하는 프레임 워크


9
이 답변은 두 용어를 완전히 이해 한 후에 훨씬 더 의미가 있습니다.
또 다른

45

웹 개발자 관점에서 :

  1. 라이브러리는 다른 라이브러리로 쉽게 교체 할 수 있습니다. 그러나 프레임 워크는 할 수 없습니다.

    jquery 날짜 선택기 라이브러리가 마음에 들지 않으면 부트 스트랩 날짜 선택기 또는 선택 날짜와 같은 다른 날짜 선택기로 바꿀 수 있습니다.

    제품을 빌드 한 AngularJS가 마음에 들지 않으면 다른 프레임 워크로 바꿀 수 없습니다. 전체 코드베이스를 다시 작성해야합니다.

  2. 대부분의 라이브러리는 프레임 워크에 비해 학습 곡선이 매우 적습니다. 예 : underscore.js는 라이브러리이고 Ember.js는 프레임 워크입니다.


가장 좋은 답변입니다. 간단하고 직접적이며 명확합니다.
Felipe Santiago

41

나는 Cohens가 대답하는 것을 좋아하지만 더 기술적 인 정의는 다음과 같습니다. 코드가 라이브러리를 호출합니다. 프레임 워크는 코드를 호출합니다 . 예를 들어 GUI 프레임 워크는 이벤트 핸들러를 통해 코드를 호출합니다. 웹 프레임 워크는 일부 요청-응답 모델을 통해 코드를 호출합니다.

이를 제어 역전 이라고도합니다. 갑자기 프레임 워크가 라이브러리와 달리 코드를 실행할 때와 방법을 결정합니다. 이것은 프레임 워크가 코드를 구성하는 방법에 훨씬 더 큰 영향을 미친다는 것을 의미합니다.


30

나는이 정의를 본 곳을 잊어 버렸지 만 꽤 좋다고 생각합니다.

라이브러리는 코드에서 호출하는 모듈이고 프레임 워크는 코드를 호출하는 모듈입니다.


6
그러나 libc에는 코드를 호출하는 qsort ()가 포함되어 있습니다. 나는 그것이 libc를 프레임 워크로 만든다고 생각하지 않습니다.
Mark Baker

모듈이란 무엇입니까?
NattyC

18

프레임 워크는 다른 라이브러리로 만들 수 있습니다. 예를 들어 봅시다.

생선 카레를 요리한다고 가정 해 봅시다. 그런 다음 오일 , 향신료 및 기타 유틸리티 와 같은 재료가 필요합니다 . 당신은 또한 당신의 요리를 준비하기위한 기초 인 물고기 가 필요 합니다 (이것은 당신의 응용 프로그램의 데이터입니다). 모든 재료를 함께 프레임 워크 라고합니다 . 이제 당신은 그것들을 하나씩 또는 조합하여 최종 제품인 생선 카레를 만들 것 입니다. underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS 등으로 만들어진 웹 프레임 워크 와 비교해보십시오 . Twitter Bootstrap v.35

지금 당신은 말의 같은 하나 개의 성분을 고려하면 기름을 . 당신은 당신의 물고기 (데이터)를 망칠 것이기 때문에 원하는 기름을 사용할 수 없습니다. 올리브유 만 사용할 수 있습니다 . underscore.js 와 비교하십시오 . 이제 어떤 브랜드의 오일을 사용 하느냐가 귀하에게 달려 있습니다. 일부 요리는 American Olive Oil (underscore.js) 또는 Indian Olive Oil (lodash.js)로 만들어졌습니다. 응용 프로그램의 취향 만 변경됩니다. 그것들은 거의 같은 목적으로 사용되기 때문에, 개발자의 선호에 따라 달라지며 쉽게 교체 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


프레임 워크 : 응용 프로그램에 고유 한 속성과 동작을 제공하는 라이브러리 모음입니다. (모든 성분)

라이브러리 : 데이터에 고유 한 속성과 동작을 제공하는 잘 정의 된 지침 세트. (물고기에 기름)

플러그인 : 플러그인이 예상대로 작동하지 않는 라이브러리 (ui-router-> AngularJS) 또는 많은 라이브러리 조합 (date-picker-> bootstrap.css + jQuery)을위한 유틸리티 빌드.


PS AngularJS는 MVC 프레임 워크이지만 JavaScript 라이브러리입니다. 라이브러리가 기본 기술 (이 경우 JavaScript)의 기본 동작을 확장한다고 생각하기 때문입니다.


좋은 설명 :)
마노

14

이것이 내가 생각하는 방식입니다 (그리고 다른 사람들이 합리화 한 것을 보았습니다).

라이브러리는 코드 내에 포함 된 것입니다. 프레임 워크는 응용 프로그램의 컨테이너입니다.



8

라이브러리는 범위가 좁은 목적으로 기능을 구현하는 반면 프레임 워크는 더 광범위한 기능을 지원하는 라이브러리 모음 인 경향이 있습니다. 예를 들어 라이브러리 System.Drawing.dll은 그리기 기능을 처리하지만 전체 .NET 프레임 워크의 일부일뿐입니다.


3
좋은 점은 프레임 워크에 라이브러리가 포함될 수 있다는 것 입니다. 따라서 첫 번째 프레임 워크이고 두 번째 인스턴스의 라이브러리 일 수 있습니다. Apache Wicket 과 같은 많은 웹 프레임 워크의 경우 처리주기를 정의하지만 구체적인 UI 구성 요소를 구현하는 큰 클래스 세트도 제공합니다.
OneWorld

.NET은 매우 큰 라이브러리라고 생각합니다. 라이브러리라고하기에는 너무 큰 라이브러리이지만 여전히 라이브러리입니다. 프레임 워크는 특정 디자인을 적용하고, 땜질 할 공간이 거의없는 제어 흐름 등을 결정합니다. .NET은 그렇게하지 않습니다. .NET은 라이브러리이고 ASP.NET MVC는 프레임 워크라고 생각합니다. 그러나 MS는 시장에 좋은 단어가 필요합니다.
nawfal

6

라이브러리-클라이언트로 사용할 수있는 클래스 또는 구성 요소 집합은 특정 작업을 수행하는 데 적합합니다.
프레임 워크-사용자보다 더 큰 무언가에 "플러그인"하기위한 특정 지침을 요구합니다. 당신은 단지 당신의 응용 프로그램 / 요구 사항에 특정한 부분들을 출판 된 요구 방식으로 제공하기 때문에 '프레임 작업은 당신의 인생을 쉽게 만들 수 있습니다'


6

라이브러리는 사용하기 쉽고 효율성이 뛰어납니다. 예를 들어 Zend 라이브러리는 잘 정의 된 클래스와 함수를 사용하여 다양한 작업을 수행하는 데 도움이 될 수 있습니다. 프레임 워크는 일반적으로 MVC (Model -view-controller) (참조) . MVC와 같은 작업 배포를 위해 잘 정의 된 시스템입니다. 모델에는 데이터베이스 측이 포함되어 있으며, 뷰는 UI 인터페이스, 컨트롤러는 비즈니스 로직입니다.


5

귀하의 해석은 나에게 잘 들립니다 ... 라이브러리 는 다른 코드에서 재사용하기 위해 컴파일되고 자체 포함 된 것이 될 수 있으며, 그 내용에는 아무런 제한이 없습니다.

반면 프레임 워크 에는 MVC와 같이 특정 응용 프로그램 개발 분야에서 사용할 수있는 다양한 기능이 있어야합니다.


5

프레임 워크는 우리가 작업을 수행하는 프레임을 제공합니다 ... 어떻게 든 단순한 라이브러리보다 "제약적"입니다.
프레임 워크는 라이브러리 세트에 일관성을 추가해야합니다.


5

라이브러리는 목표 (예 : 소켓, 암호화 등)에 도달하기위한 유틸리티 세트라고 생각합니다. 프레임 워크는 라이브러리 + 런타임 EINVIRONNEMENT입니다. 예를 들어 ASP.NET은 프레임 워크입니다. HTTP 요청을 수락하고, 페이지 객체를 생성하고, lyfe cicle 이벤트를 호출하는 등의 작업을 수행합니다. 프레임 워크에서이 모든 작업을 수행합니다. 현재 요청!

어쨌든 매우 흥미로운 질문입니다!


5

이 답변의 출처를 기억하지 못하지만 (인터넷의 .ppt에서 찾았습니다) 대답은 매우 간단합니다.

라이브러리 및 프레임 워크는 응용 프로그램에서 사용할 수 있으며 특정 "문제"를 해결하는 데 도움이되는 클래스, 모듈 및 / 또는 코드 (프로그래밍 언어에 따라 다름)입니다.

이 문제는 응용 프로그램에서 정보를 기록하거나 디버깅하거나, 차트를 그리거나, 특정 파일 형식 (html, pdf, xls)을 만들거나, 데이터베이스에 연결하거나, 응용 프로그램의 일부 또는 완전한 응용 프로그램을 만들거나 디자인 패턴 .

이러한 모든 문제를 해결하기 위해 프레임 워크 또는 라이브러리를 가질 수 있으며 프레임 워크는 일반적으로 더 복잡하거나 큰 문제를 해결하는 데 도움이되지만 주요 차이점에 대한 결과는 두 가지의 주요 정의가 아닙니다.

라이브러리와 프레임 워크의 주요 차이점은 자체 코드 간의 종속성입니다. 즉, 프레임 워크를 사용하려면 FW에서 거의 모든 클래스, 모듈 또는 코드를 사용해야하지만 라이브러리를 사용하려면 하나 또는 자신의 응용 프로그램에서 lib의 클래스, 모듈 또는 코드가 거의 없습니다.

즉, 프레임 워크에 예를 들어, 응용 프로그램에서 프레임 워크를 사용하기 위해 50 개의 클래스가있는 경우 코드에서 10-15 개 이상의 클래스를 사용해야합니다. 클래스 (해당 클래스의 객체)는 프레임 워크의 다른 클래스에있는 메소드에 대한 입력 / 매개 변수입니다. .NET 프레임 워크, Spring 또는 MVC 프레임 워크를 참조하십시오.

그러나 예를 들어, 로그 라이브러리는 코드에서 Log 클래스를 사용하고 "로깅 문제"를 해결하는 데 도움이됩니다. 즉, 로그 라이브러리에 코드와 같은 클래스가 더 이상없는 것은 아닙니다. 파일 처리, 화면 출력 또는 데이터베이스 처리, 그러나 코드에서 해당 클래스를 만지거나 사용하지 마십시오. 이것이 라이브러리가 아닌 라이브러리의 이유입니다.

또한 프레임 워크 및 라이브러리보다 더 많은 범주가 있지만 주제가 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.