프레임 워크 와 라이브러리 의 차이점은 무엇입니까 ?
나는 항상 라이브러리를 특정 문제 또는 특정 응용 프로그램 개발 영역 (예 : 데이터베이스 액세스)을 해결하는 데 중점을 둔 일련의 객체 및 함수로 생각했습니다. 반면에 특정 방법론 (예 : MVC)을 중심으로하고 응용 프로그램 개발의 모든 영역을 다루는 라이브러리 모음으로서의 프레임 워크.
프레임 워크 와 라이브러리 의 차이점은 무엇입니까 ?
나는 항상 라이브러리를 특정 문제 또는 특정 응용 프로그램 개발 영역 (예 : 데이터베이스 액세스)을 해결하는 데 중점을 둔 일련의 객체 및 함수로 생각했습니다. 반면에 특정 방법론 (예 : MVC)을 중심으로하고 응용 프로그램 개발의 모든 영역을 다루는 라이브러리 모음으로서의 프레임 워크.
답변:
실제로 이러한 용어는 사용되는 컨텍스트에 따라 많은 다른 의미를 가질 수 있습니다.
예를 들어, 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 " 주제에 관한 기사 입니다. 나는 개인적으로이 기사가 논쟁의 여지가 있다고 생각합니다. 그가 말한 것은 잘못이 아니지만 프레임 워크의 여러 정의 중 하나를 골라 라이브러리의 고전적인 정의와 비교합니다. 예를 들어 그는 서브 클래 싱을위한 프레임 워크가 필요하다고 말합니다. 정말? 라이브러리에 객체를 정의하고 객체에 링크하여 코드에서 하위 클래스로 만들 수 있습니다. 나는 그것을 위해 "프레임 워크"가 어떻게 필요한지 알지 못한다. 어떤면에서 그는 오늘날 프레임 워크라는 용어가 어떻게 사용되는지 설명합니다. 내가 전에 말했듯이 그것은 단지 과장된 말입니다. 일부 회사는 일반 라이브러리 (클래식 라이브러리의 의미에서) 만 공개하고 더 멋진 소리로 "프레임 워크"라고 부릅니다.
라이브러리 를 수행 특정, 잘 정의 된 작업.
프레임 워크는 응용 프로그램이 골격을 작성하여 작업의 "고기"를 정의하는 골격이다. 골격에는 여전히 부품을 연결하는 코드가 있지만 가장 중요한 작업은 응용 프로그램에서 수행됩니다.
라이브러리의 예 : 네트워크 프로토콜, 압축, 이미지 조작, 문자열 유틸리티, 정규식 평가, 수학. 작업은 독립적입니다.
프레임 워크의 예 : 웹 애플리케이션 시스템, 플러그인 관리자, GUI 시스템. 프레임 워크는 개념을 정의하지만 응용 프로그램은 최종 사용자가 관심을 갖는 기본 기능을 정의합니다.
가장 큰 차이점은 프레임 워크가 " 할리우드 원칙 "을 따르는 것입니다. 즉 "전화하지 마십시오. 전화하겠습니다."
Martin Fowler 에 따르면 :
라이브러리는 기본적으로 당신이 호출 할 수있는 함수의 집합이며, 요즘은 일반적으로 클래스로 구성. 각 호출은 일부 작업을 수행하고 클라이언트에게 제어권을 반환합니다.
프레임 워크 에 내장 된 더 행동 몇 가지 추상적 인 디자인을 구현한다. 당신은 서브 클래스로 또는 자신의 클래스에 연결하여 두 프레임 워크의 다양한 장소에 당신의 행동을 삽입 할 필요가 그것을 사용하기 위해. 그런 다음 프레임 워크의 코드는이 시점에서 코드를 호출합니다.
도서관에 전화하십시오.
프레임 워크가 전화합니다.
図 書館 助 け
足 場 が 痛 い
多 く の 涙
그것은 단지이다 콜렉션 의 루틴 (함수 프로그래밍) 또는 클래스 정의 (객체 지향 프로그래밍). 그 이유는 단순히 코드 재사용입니다 . 즉, 이미 다른 개발자가 작성한 코드를 가져옵니다. 클래스 또는 루틴은 일반적으로 도메인 특정 영역에서 특정 작업을 정의 합니다 . 예를 들어, 개발자가 알고리즘 작동 방식의 구현을 다시 실행하지 않고도 함수를 호출 할 수있는 일부 수학 라이브러리가 있습니다.
프레임 워크에는 모든 제어 흐름 이 이미 있으며 코드로 채워야 할 미리 정의 된 흰 반점 이 많이 있습니다 . 프레임 워크는 일반적으로 더 복잡합니다. 그것은 해골 정의 응용 프로그램이 골격을 채우기 위해 자신의 기능을 정의합니다. 이런 식으로, 적절한 경우 프레임 워크에서 코드를 호출합니다. 이점은 개발자가 디자인이 좋은지 아닌지 걱정할 필요가없고 도메인 특정 기능을 구현하는 것만 걱정할 수 있다는 것입니다.
라이브러리와 프레임 워크의 주요 차이점은 "제어의 반전" 입니다. 라이브러리에서 메소드를 호출하면 제어 할 수 있습니다. 그러나 프레임 워크를 사용하면 제어가 반전됩니다. 프레임 워크가 호출합니다 . 출처.
둘 다 프로그래머가 사용할 API를 정의했습니다. 이를 결합하기 위해 라이브러리를 애플리케이션의 특정 기능으로, 프레임 워크를 애플리케이션의 골격으로 생각하고 API를 연결하는 API를 생각할 수 있습니다. 일반적인 개발 프로세스는 일반적으로 프레임 워크로 시작하고 API를 통해 라이브러리에 정의 된 함수를 채 웁니다.
웹 개발자 관점에서 :
라이브러리는 다른 라이브러리로 쉽게 교체 할 수 있습니다. 그러나 프레임 워크는 할 수 없습니다.
jquery 날짜 선택기 라이브러리가 마음에 들지 않으면 부트 스트랩 날짜 선택기 또는 선택 날짜와 같은 다른 날짜 선택기로 바꿀 수 있습니다.
제품을 빌드 한 AngularJS가 마음에 들지 않으면 다른 프레임 워크로 바꿀 수 없습니다. 전체 코드베이스를 다시 작성해야합니다.
대부분의 라이브러리는 프레임 워크에 비해 학습 곡선이 매우 적습니다. 예 : underscore.js는 라이브러리이고 Ember.js는 프레임 워크입니다.
나는이 정의를 본 곳을 잊어 버렸지 만 꽤 좋다고 생각합니다.
라이브러리는 코드에서 호출하는 모듈이고 프레임 워크는 코드를 호출하는 모듈입니다.
프레임 워크는 다른 라이브러리로 만들 수 있습니다. 예를 들어 봅시다.
생선 카레를 요리한다고 가정 해 봅시다. 그런 다음 오일 , 향신료 및 기타 유틸리티 와 같은 재료가 필요합니다 . 당신은 또한 당신의 요리를 준비하기위한 기초 인 물고기 가 필요 합니다 (이것은 당신의 응용 프로그램의 데이터입니다). 모든 재료를 함께 프레임 워크 라고합니다 . 이제 당신은 그것들을 하나씩 또는 조합하여 최종 제품인 생선 카레를 만들 것 입니다. 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)의 기본 동작을 확장한다고 생각하기 때문입니다.
여기에는 Joel Spolsky 의 쓴 기사 가 링크되어 있지만 도구 상자, 라이브러리, 프레임 워크 등의 좋은 차이점이 있습니다.
라이브러리는 범위가 좁은 목적으로 기능을 구현하는 반면 프레임 워크는 더 광범위한 기능을 지원하는 라이브러리 모음 인 경향이 있습니다. 예를 들어 라이브러리 System.Drawing.dll은 그리기 기능을 처리하지만 전체 .NET 프레임 워크의 일부일뿐입니다.
이 답변의 출처를 기억하지 못하지만 (인터넷의 .ppt에서 찾았습니다) 대답은 매우 간단합니다.
라이브러리 및 프레임 워크는 응용 프로그램에서 사용할 수 있으며 특정 "문제"를 해결하는 데 도움이되는 클래스, 모듈 및 / 또는 코드 (프로그래밍 언어에 따라 다름)입니다.
이 문제는 응용 프로그램에서 정보를 기록하거나 디버깅하거나, 차트를 그리거나, 특정 파일 형식 (html, pdf, xls)을 만들거나, 데이터베이스에 연결하거나, 응용 프로그램의 일부 또는 완전한 응용 프로그램을 만들거나 디자인 패턴 .
이러한 모든 문제를 해결하기 위해 프레임 워크 또는 라이브러리를 가질 수 있으며 프레임 워크는 일반적으로 더 복잡하거나 큰 문제를 해결하는 데 도움이되지만 주요 차이점에 대한 결과는 두 가지의 주요 정의가 아닙니다.
라이브러리와 프레임 워크의 주요 차이점은 자체 코드 간의 종속성입니다. 즉, 프레임 워크를 사용하려면 FW에서 거의 모든 클래스, 모듈 또는 코드를 사용해야하지만 라이브러리를 사용하려면 하나 또는 자신의 응용 프로그램에서 lib의 클래스, 모듈 또는 코드가 거의 없습니다.
즉, 프레임 워크에 예를 들어, 응용 프로그램에서 프레임 워크를 사용하기 위해 50 개의 클래스가있는 경우 코드에서 10-15 개 이상의 클래스를 사용해야합니다. 클래스 (해당 클래스의 객체)는 프레임 워크의 다른 클래스에있는 메소드에 대한 입력 / 매개 변수입니다. .NET 프레임 워크, Spring 또는 MVC 프레임 워크를 참조하십시오.
그러나 예를 들어, 로그 라이브러리는 코드에서 Log 클래스를 사용하고 "로깅 문제"를 해결하는 데 도움이됩니다. 즉, 로그 라이브러리에 코드와 같은 클래스가 더 이상없는 것은 아닙니다. 파일 처리, 화면 출력 또는 데이터베이스 처리, 그러나 코드에서 해당 클래스를 만지거나 사용하지 마십시오. 이것이 라이브러리가 아닌 라이브러리의 이유입니다.
또한 프레임 워크 및 라이브러리보다 더 많은 범주가 있지만 주제가 아닙니다.