결론부터 말하자면
프레임워크와 라이브러리의 차이는
코드가 수동적으로 사용되냐, 능동적으로 사용하냐의
차이를 갖고 있다.
프레임 워크(Web Application Framework)란
"프로그래밍에서 특정 운영 체제를 위한 응용프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임이다." 라고
위키에서는 정의한다.
라이브러리란
"소프트웨어를 만들 때 쓰이는 클래스나 서브루틴들의 모임을 가리키는 말이다."라고
위키에서는 정의한다.
역시 단순한 정의로는 와닿지 않는다.
https://kldp.org/node/124237
재미있는 글이 올라와 각색했다.
---*---
프레임워크와 라이브러리의 차이를 알기 위해서는 물리적인 계층이 아니라 논리적인 계층을 보아야 한다.
물리적인 계층을 보면
일단 모든 소스코드든 라이브러리든 메모리에 들어가는 정보는
컴파일러나 인터프리터에겐 그저 호출가능한 모듈일 뿐이기 때문이다.
라이브러리는 일종의 도구, 예를 들면 망치라고 할 수 있다.
사람이 도구를 사용해서 여러 가지 일들을 해낼 수 있다.
프레임워크는 일종의 강력한 수단, 예를 들면 자동차라고 할 수 있다.
사람이 타서 시동을 걸고, 기어 넣고, 운전을 하여 목적지로 이동한다.
망치를 사용할 때는 정해진 목적이란게 딱히 없다.
못을 박을 때 효율적으로 사용할 수 있을 것이며
삽이 없다면 망치로 땅도 팔 수 있는 것이고
톱이 없다면 망치로 쳐내려도 되는 것이다.
하지만 자동차는 '이동'이라는 목적이 있는 물체다.
어디론가 이동을 할 때는 정말 효율적이고 강력한 수단이 되겠지만
자동차로 땅을 팔 수는 없으며 무엇인가 자르지도 못하는 것이다.
만들어지는 순간부터 이동이라는 목적에 맞게 설계되었기 때문에
매뉴얼에 맞게 조작을 해주면 최고의 효율로 보답을 해준다.
즉, 라이브러리와는 다르게 프레임워크는 이미 프로그래밍할 규칙이 정해져있는 것이다.
---*---
조금 덧붙여서, 그렇다면 언어를 배운다는 것은 이 점에서 보면 어떻게 해석할 수 있을까.
사지를 움직일 수 있게 된 정도.
라고 할 수 있지 않을까
팔과 손을 움직여 도구를 사용하거나 자동차를 운전하는 것이니 말이다.
토비의 스프링 책 3.1장에서 프레임워크와 라이브러리의 차이를 다룬 좋은 글이 있어서 긁어왔다.
---*---
프레임워크도 제어의 역전 개념이 적용된 대표적인 기술이다.
프레임워크는 라이브러리의 다른 이름이 아니다.
프레임워크는 단지 미리 만들어 둔 반제품이지, 확장에서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다.
라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이다.
프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다.
즉 프레임워크에서 애플리케이션 코드는 짜놓은 틀에서 수동적으로 동작해야 하는 것이다.
---*---
-..-
- 구글에서 만든 Single Page App을 만들 때 반복되는 코드와 복잡한 코드를 줄이고 테스트를 쉽게 하도록 하기 위해 만든 JavaScript MVC Framework [본문으로]
'Dev.World > 개발상식&언어' 카테고리의 다른 글
[개발상식] 5.인터넷 기초 I / DNS,IP (0) | 2016.04.06 |
---|---|
[개발상식] 4. REST or RESTFul (0) | 2016.04.06 |
[개발상식] 3. 라우팅 / 패킷 (0) | 2016.04.05 |
[그들이 쓰는 언어] 2.파싱 / 파서 / 컴파일 / 루틴 (2) | 2016.04.03 |
[그들이 쓰는 언어] 1. 리터럴 (2) | 2016.03.30 |