* 라이브러리(Library)?
- (Component) Library = collection of related features
라이브러리 = 기능들의 집합 재 사용관점에서 api를 패키징 한 것. 말 그대로 도서관(라이브러리)에서 필요한 지식(feature)이 있는 책을 뺴서 읽고 이러는 것 처럼 프로그래머가 사용할 수 있는 프로그램이다.
+) 공통으로 사용할 수 있는 기능을 모듈화한 것이다. 개발자가 만든 클래스에서 라이브러리를 호출만 하면 된다. 내가 그 라이브러리를 위해서 뭔가 코드를 써넣고 할 것은 없다.
* 프레임워크(Framework)?
- (Application) Framework = half done application
'IoC' 관점에서 어플리케이션을 구동하는, 말그대로 '틀'이다. 라이브러리는 내가 책을 완성할 필요가 없다. 과제를 할 때 필요한 내용이 있는 책이 있다면 그 책을 가져다가 그냥 그대로 쓰면 된다. 그러나 프레임워크는 말 그대로 골조이다. 골조만 있는 집이 완성된 집이라고 할 수 있나? 집의 기능이 만약 비 피하기, 따뜻한 보온, 안락함 제공이라고 한다면 골조만 있는 집은 이러한 기능을 제공할 수 있는가? 그렇지 않다. 따라서 사용자가 이 프레임워크를 완성시켜야 한다.
* 라이브러리(Library)와 프레임워크(Framework)의 차이점
따라서 사용자는 프레임워크를 완성시키고 라이브러리는 사용자의 코드를 완성시킨다. 이 말인즉슨 당신의 코드는 라이브러리를 호출할 것이며(완성되기 위해) 프레임워크는 당신의 코드를 호출할 것이라는 이야기(역시 완성되기 위해)다.
또한 flow control 관점에서도 생각해볼 수 있는데, 라이브러리는 그저 호출 받아서 자기 할 일 한 뒤 반환해줄거 반환해줄뿐 프로그램의 전체 흐름을 주도하지는 않는다. 예를 들어 과제를 할 때 책을 발췌는 하지만 그 책이 과제를 전부 해주는 것은 아니다. 그냥 그 내용에 대한 부분만 책의 역할일뿐 과제의 흐름을 주도하지 않는다.
그러나 프레임워크는 본인이 모든 flow를 잡고 있으며 사용자가 쓰는 코드는 그 프레임워크에 의해 호출당한다. 예를 들어 위에 프레임워크는 골조라고 얘기했는데, 건축자가 벽을 세울 때 나무 벽을 세우든 벽돌 벽을 세우든 어쨌든 중요한 것은 골조이고 그런 것을 생각하면 될 듯 하다. -> IoC(Inversion of Control) 예를 들어 스프링에서 개발자가 객체인 빈을 정의하고 빈을 등록해놓으면 IoC 컨테이너(스프링 컨테이너)가 라이프사이클 관리해주는 것 -> IoC(제어의 역전)
참고한 글 - kldp.org/node/124237
댓글에 좋은 설명이 많다. 감사합니다!
'CS > software engineering' 카테고리의 다른 글
Agile 애자일 (0) | 2021.07.12 |
---|---|
CI/CD (0) | 2021.07.03 |
결합도와 응집도에 대하여 (Coupling and Cohension) (0) | 2021.06.26 |
3rd party(써드 파티)란? (0) | 2021.06.19 |
MVC (0) | 2021.04.05 |