Programing

모듈, 라이브러리 및 프레임 워크의 차이점

crosscheck 2020. 11. 30. 07:51
반응형

모듈, 라이브러리 및 프레임 워크의 차이점


인기있는 프로그래밍에서이 용어의 차이점은 무엇이며 겹치는 부분은 무엇입니까?

누락 된 관련 용어가 있습니까?


세 가지 모두 기능을 제공합니다.

그러나 중요한 차이점이 있습니다.

라이브러리 입니다 단지 관련 기능의 컬렉션입니다. 그 이상은 아니지만 그 이하도 아닙니다. 라이브러리의 특징을 정의하는 것은 사용자 가 제어 할 수 있다는 입니다. 라이브러리 호출합니다.

프레임 워크 의 정의 특성 Inversion of Control 입니다. 프레임 워크는 당신을 호출 합니다 . (이는 할리우드 원칙 으로 알려져 있습니다. "전화하지 마십시오. 전화하겠습니다.") 프레임 워크가 제어됩니다. 제어 흐름과 데이터 흐름은 프레임 워크에서 관리합니다.

다음과 같이 생각할 수 있습니다. 두 경우 모두 응용 프로그램이 있고이 응용 프로그램에는 코드가 생략 된 구멍이 있으며 이러한 구멍을 채워야합니다. 라이브러리와 프레임 워크의 차이점은 다음과 같습니다.

  • 응용 프로그램을 작성하는 사람,
  • 구멍은 무엇이며
  • 구멍을 채우는 사람.

라이브러리를 사용 하면 응용 프로그램을 작성하고 라이브러리 에 의해 채워지 지루한 세부 정보 는 생략합니다 .

프레임 워크로, 프레임 워크 작가는 아웃 응용 프로그램을 쓰고, 잎 흥미로운 세부 사항, 당신이 기입.

프레임 워크 자체에 지루한 세부 정보가 포함될 수 있고, 프레임 워크 작성자가 라이브러리로 채운 부분, 작성하는 부분에는 지루한 세부 정보가 포함될 수 있으며, 라이브러리로 채우고 프레임 워크가 제공 할 수 있기 때문에 이것은 때때로 약간 혼란 스러울 수 있습니다. 프레임 워크와 잘 작동하거나 프레임 워크와 함께 자주 필요한 번들 라이브러리 세트. 예를 들어, 웹 프레임 워크를 사용하여 웹 애플리케이션을 작성할 때 XML 생성기 라이브러리를 사용할 수 있으며 해당 XML 라이브러리는 프레임 워크에서 제공되었거나 심지어 그 일부가 될 수도 있습니다.

그러나 그렇다고 라이브러리와 프레임 워크가 구별되지 않는다는 의미는 아닙니다. 구별은 매우 분명합니다. Inversion of Control은 그 모든 것입니다.

모듈 의 정의 특성 정보 숨김 입니다. 모듈에는 명시 적이지만 제공하는 기능과 종속 된 기능을 모두 명시 적으로 지정 하는 인터페이스 가 있습니다. (종종 전화 수출수입 기능.)이 인터페이스는이 구현 (또는 여러 구현을 실제로), 모듈의 사용자로부터 블랙 박스있는.

또한 라이브러리는 관련 기능 모음 인 반면 모듈은 단일 기능 만 제공 합니다. 즉, 모듈과 라이브러리가 모두있는 시스템이있는 경우 라이브러리에는 일반적으로 여러 모듈이 포함됩니다. 예를 들어, List모듈, Set모듈 및 모듈 을 포함하는 컬렉션 라이브러리가있을 수 있습니다 Map.

모듈 시스템 없이도 모듈을 작성할 수 있지만 이상적으로는 모듈이 개별적으로 컴파일 가능하고 (해당 개념이 타당한 언어 및 실행 환경의 경우), 별도로 배포 가능하고, 모듈 구성이 안전하기를 원합니다 (즉, 모듈 구성은 런타임 전에 작동하거나 오류를 트리거하지만 런타임 오류 또는 예기치 않은 동작으로 이어지지 않습니다.) 이를 위해서는 Racket의 유닛, Standard ML의 모듈 및 펑터 또는 Newspeak의 최상위 클래스와 같은 모듈 시스템이 필요합니다.

그래서 요약 해 보겠습니다.

  • 라이브러리 : 관련 기능 모음
  • 프레임 워크 : 제어 반전
  • 모듈 : 명시 적 내보내기 및 가져 오기가있는 추상 인터페이스, 구현 및 인터페이스가 분리되어 있으며 여러 구현이있을 수 있으며 구현이 숨겨져 있습니다.

다음과 같이 모듈, 라이브러리 및 프레임 워크를 볼 수 있습니다.

  • 모듈 = 손가락
  • 도서관 = 손
  • 틀 = 당신의 몸

당신의 손가락 / 모듈 :
당신은 그것들을 움직이고, 만질 수 있고, 당신은 손에 5 개를 가지고 있어서 더 쉽게 물건을 잡을 수 있습니다. 그것들은 신체의 가장 큰 부분은 아니지만 가장 유용한 부분 중 하나입니다. 그것들 없이는 해킹 할 수 없습니다! ... 모듈 은 프로그램의 일부이며, 그것들을 사용할 수 있고, 코드를 다른 파일로 확장 할 수 있습니다 (많은 코드가 들어있는 큰 파일이 아닙니다). 그들은 읽기를 더 쉽게 만듭니다.

손 / 도서관 :
손은 각각 5 개의 손가락으로 구성되어 있으며, 물건을 잡고, 움직이고, 상호 작용할 수 있습니다. 라이브러리 도 프로그램의 일부입니다! 모듈 세트처럼 보일 수 있으며, 다른 프로그램과 상호 작용하거나 프로그램과 관련된 것을 만드는 데 사용할 수 있습니다.

당신의 몸 / 프레임 워크 :
당신의 몸은 완전한 시스템입니다. 당신은 당신의 몸으로 당신이 원하는 무엇이든 할 수 있습니다. (비행기, 비행기로 걸어 가면 비행기는 또 다른 시스템입니다), 당신은 독특합니다 ... 프레임 워크 당신의 몸, 완전한 시스템, 그것은 자체적으로 작동하지 않습니다 (당신은 herpderp를 코딩해야합니다) , 당신은 약간의 해킹으로 완전한 프로그램을 만들 수 있습니다 ...

그냥 내 해석 ... 내가 틀렸다면 나를 고쳐주세요.


다른 답변에서 이해 한 ASCII 예술 해석 :

+-----------------------------------------------+
|  ...........................  ..............  |
|  : f1() f2()  :  f3()      :  : f4() f5()  :  |
|  :            :            :  :            :  |
|  : l1_module1 : l1_module2 :  : l2_module3 :  |
|  :            :            :  :            :  |
|  --library1-----------------  --library2----  |
|                                               |
|   application.c                               |
|                                               |
|       #include l1_module2                     |
|       #include l2_module3                     |
|                                               |
|       int main() {                            |
|           # case 'reload'                     |
|           f5();                               |
|           # case 'start'                      |
|           f1();                               |
|           # case 'stop'                       |
|           f4();                               |
|       }                                       |
|                                               |
+-----------------------------------------------+

.................................................
: FRAMEWORK_X                                   :
:                                               :
:     application start                         :
:     ...                                       :
:     application reload                        :
:     application stop                          :
:     ...                                       :
:...............................................:

무슨 일이야:

  1. 개발자는 라이브러리 1라이브러리 2를 설치 하여 모듈 내부에 제공된 함수를 사용할 수 있습니다.

  2. 그런 다음 l1_module1l2_module3 을 포함 합니다. ( 지금 l1_module2 가 필요하지 않습니다 ).

  3. 이제 그들은 f1 , f2 , f4f5 의 기능을 사용할 수 있으므로 응용 프로그램을 작성합니다.

  4. 이제 일부 FRAMEWORK_X 내부에서 애플리케이션을 사용하기를 원하기 때문에이 프레임 워크에 필요한 인터페이스를 구현해야합니다. 프레임 워크가 애플리케이션을 호출 할 수 있습니다.

몇 가지 참고 사항 :

  • In practice, there is always some framework. For example, the OS is framework for your application (which is why you define main())! Or you could say that the bootloader is framework for your OS and the BIOS is framework for your bootloader etc.

Roughly, I'd consider it this way: a module is an importable "atom" of functionality; it defines the smallest subset of grouped functionality that can be used (note that it's not the smallest unit of functionality; that would be a class (or function, depending)). A library would be, in this approach, a set of modules; you can use a library without using all of the modules that are part of that library. A framework is the environment upon which the library (likely) depends; it makes up the baseline environment within which all of the above work.

Note that these terms are somewhat fungible, and these definitions will not always be solid in every situation; this is just my interpretation of some of the common usages I've come across.


I believe frameworks and libraries are modules. Since modules are codes imported or exported from your code. As they say, Frameworks calls your code, your code calls libraries. Either way, a module is involved


From my point of view a framework contains libraries and both are modules.

E.g. In Swift a module is a single unit of code distribution — a framework or application that is built and shipped as a single unit.


In my opinion a module could be a subset of a library, which in turn could be a subset of a framework. But I'm sure there are exceptions to this and various interpretations based on the context -- especially for the term module.


Module

A module is the output of modular design, a component with various granularity.

In context of modular programming, a module is an entity expressible by the coding language introducing the programmability (typically, a programming language or a hardware description language) to the solution.

Some languages explicitly support the concept of module and provide it as a language feature. A notable early instance is Modular-2. Despite the feature, users can still specify other kinds of modules by conventions with different granularity in software design and project management, like a source file and a directory of source files. The built-in language feature does not eliminate the need of modules of different granularity, but people may use different terminology to avoid possible ambiguity with the language feature.

Some other languages do not provide specific feature named module, but users can make choices to specify parts of program as modules. For example, the C language does not have modules, but users can specify a function, a source file, a translation unit (a source file with the headers it includes) or even bunch of files as a module on demand. A module in such case can be with different forms of code: source, binary code from source or provided elsewhere with linkage compatibility guarantees, or even mixed.

The only real restriction of "module", if any, is that it should reflect to the result of some modular design, so components in a module should share some similarities to make the boundary clear. A module should usually provide some kinds of exported interface to users; it may optionally import dependencies from external program components. Some of modules can be a submodule of others.

Code management tools may utilizes the concepts related to module. For example, Git has the concept of submodule, which is essentially a versioned subdirectory of code in the repository.

Library

A library is a specialized kind of program module containing (more specifically, owning) a collection of (sub)modules to be used in some encapsulated (that is, not allowed being modified directly in later use) manner. Usually a library is designed to be reused and deployed within non-volatile storage. Typically, a library is provided as one or several on-disk files in some steady persistent formats. Such libraries are called archives, dynamic objects, packages, etc. With support of external program databases, libraries can also be identified by means other than filenames or other file-based properties. For example, CLI provides library assemblies with aid of GAC.

Framework

A framework is another specialized kind of program module which contains various pre-desinged functionality of code. A framework can be deployed in a form of one or several libraries. The difference between a framework and other kinds of modules in a program is that the former emphasizes a mostly complete, freezed but adaptive and extensible solution of some common work, so the user of the framework can focus on the domain-specific and project-specific problems instead of writing glue code to put different libraries together and to make them work fluently. However, this has a cost of design complexity throughout the whole project. Notably, many (but not all) frameworks would enforce users' code following an IoC style. As a result, it is almost impossible to put same kind but different frameworks together smoothly in an idiomatic and natural way. Using language with first-class control effects, IoC is not explicitly required in a framework. However this implies that combination of normal libraries to having functionality of a framework is easier to achieve, so there is less need to organize program modules like traditional frameworks which often undermine flexibility easily.


Library: A collection of namespaced/modularized code.

Framework: A framework is some piece of code (wheter it’s a compiler, a design pattern or something else) that is reusable and thereby makes life easier for developers so that they do not have to reinvent the wheel.

Module: In JavaScript for example a module is just an object with public properties. I'm not sure, but I think there is no generic answer for the term Module.

참고URL : https://stackoverflow.com/questions/4099975/difference-between-a-module-library-and-a-framework

반응형