개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대이다.
'특정 결과물을 구현하기 위해서' 여러 기능을 가진 클래스와 라이브러리가 합쳐진 형태인 프레임워크를 사용한다.
클래스화, 모듈화를 하는 이유는 재사용성을 위해서이다.
프레임워크는 이 재사용성을 하나의 큰 단위로 묶어준 것이다.
재사용이 가능한 클래스와 라이브러리를 융합한 채로 처음부터 제공하기 때문에, 통합성, 일관성의 부족이 발생되는 문제를 해결해 줄 수 있다.
프레임워크는 프로그래밍할 규칙이 이미 정해져있다.
설정파일로 사용되는 XML에 어떤 태그를 써야하며, 어떤 함수를 추가적으로 작성해야하고, 소스 파일을 어느 위치에 넣어야하며, DB와 연동하기 위해 무엇을 써넣어야 하는지 정해져 있다.
언어 | 프레임워크 |
---|---|
Java | Struts, Spring, 전자정부 프레임워크 |
Python | Django, Flask |
JavaScript | AngularJS, React, Polymer, Ember |
안드로이드 앱 개발 | Android |
아이폰 앱 개발 | Cocoa Touch |
단순 활용가능한 도구들의 집합이다.
즉, 특정 기능을 모아둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미한다.
사용자가 직접 일반적인 조작으로 실행할 수 없으며, 개발자가 만든 클래스에서 호출하여 사용한다.
언어 | 프레임워크 |
---|---|
Java | JSTL, Lombok, Gson, Jackson |
Python | NumPy, Pandas, matplotlib, scipy, PyTorch, Transformers |
JavaScript | jQuery, React, Jindo |
C | OpenGL, Vulkan, Mantle |
C++ | STL, MFC, QT, DirectX, Boost |
프레임워크와 라이브러리의 차이는
어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 달려있다.
프레임워크는 전체적인 흐름을 프레임워크가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는 것이다. 프레임워크는 그 틀안에 이미 제어 흐름에 대한 주도성을 내재하고 있다. 프레임워크는 그것을 사용한다기보다는 그 틀 안에 들어가서 이용한다는 느낌이다.
라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이다. 즉, 라이브러리는 라이브러리를 가져다가 사용하고 호출하는 측(사용자)에 전적으로 주도성이 있다.
프레임워크에는 제어의 역전 개념이 적용된다.
제어의 역전(Inversion Of Control, IoC)이란 사용자가 가지고 있던 컨트롤 권한을 외부에 위임하는 것을 의미한다. 프레임워크는 제어의 역전 개념이 적용된 대표적인 기술이라고 할 수 있다.
위에서 설명했듯이 라이브러리는 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용한다.
반면 프레임워크는 프레임워크의 메소드가 사용자의 코드를 호출 한다는데 그 특징을 가지고 있다.
프레임워크의 메소드가 사용자 코드를 호출하기 위해서
사용자는 프레임워크의 event, delegate 에 나의 메소드를 등록 시켜 코드를 호출시킨다. 혹은 프레임워크에 정의 되어 있는 인터페이스 interface, 추상타입 abstract 을 나의 코드에서 구현, 상속시킨 후에 프레임워크에 넘겨주는 것입니다. 이러한 방법으로 프레임워크가 나의 코드를 호출할 수 있다.
참고자료
1) https://webclub.tistory.com/458
2) 프레임워크
https://namu.wiki/w/%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC
3) 라이브러리
https://namu.wiki/w/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC
3) 제어의 역전
https://hudi.blog/inversion-of-control/
4) https://moolgogiheart.tistory.com/87