Studying/CS Knowledge

프레임워크 & 라이브러리

aoaa 2022. 6. 25. 17:10

 

 우리가 치킨 집을 창업한다고 생각해보겠습니다. 닭, 소스를 사고 만들어보고 맛이 없으면 버리고 다시 새로 만들어봅니다. 치킨 집의 이름을 정하고 메뉴판도 만들고 매장을 차려야 장사를 시작할 수 있을 것입니다. 그런데 우리가 창업을 할 때는 자기 이름으로 차리는 경우는 드물고 프렌차이즈로 간판을 빌립니다. 여기서 BHX, BBX 등 브랜드가 프레임워크라고 생각하면 됩니다. 


1. Framework

 뼈대를 뜻하는 프레임워크는 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 제공하는 것을 말합니다. 애플리케이션 개발 시, 필수적인 코드 및 알고리즘, DB 연동과 같은 기능들을 위해 어느정도 뼈대를 제공하며, 사용자는 이러한 뼈대(프레임)에서 애플리케이션을 개발합니다. 앱 구동, 메모리 관리, 이벤트 루프 등 공통된 부분은 프레임워크가 관리하며 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드를 구현하면 됩니다.

 Java-Spring, Python-Django, Swift-cocoa touch, 웹 개발에서 Angular, Vue.js 등.. 여러 종류들이 있습니다. 


2. Library

라이브러리는 소프트웨어 개발 시 컴퓨터 프로그램이 사용하는 특정 기능을 모아둔 코드, 함수들의 집합이며 코드 작성시 활용 가능한 Tool들의 집합을 의미합니다.

웹 개발에서 React.js, Node.js에서 npm으로 설치한 모듈, C++의 표준 템플릿 라이브러리(STL) 등.. 이 있습니다.


 

3. 차이점?

 이렇게 들으면 프레임워크와 별로 차이가 없어보입니다. 라이브러리도 다른 사람들이 만들어 놓은 코드를 이용한다는 측면에서 프레임워크와 같습니다.

 하지만 프레임워크가 더 큰 개념이라고 볼 수 있습니다. 자동차로 비교하자면, 프레임워크는 자동차의 프레임(뼈대)를 말하고, 라이브러리는 자동차의 기능을 하는 부품이라고 보면 됩니다.

 

 각종 라이브러리와 코드들이 모여 프레임워크가 됩니다. 또한, 가장 큰 차이점은 제어 흐름의 권한이 어디에 있는가 입니다. 프레임워크는 전체적인 흐름을 스스로 쥐고 있으며, 사용자는 그 안에서 필요한 코드를 짜 넣지만, 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것입니다. 

 

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어합니다. 단지 동작하는 중에 필요한 기능이 있을 때, 능동적으로 라이브러리를 사용할 뿐입니다. 반면 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용되는 것입니다. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 합니다.

 

 제어의 역전이란 어떤 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경써야 할 것을 줄이는 전략입니다. 일반적으로 라이브러리는 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용하는 것을 의미합니다. 프레임워크를 규정하는 특성은 프레임워크의 메소드가 사용자의 코드를 호출한다는 데 있습니다. 어떻게 프레임워크가 나의 메소드를 호출할 수 있을까요?

제어를 역전(프레임워크가 코드를 호출)시키는 가장 쉬운 접근 방법은 프레임워크의 eventm delegate에 사용자의 메소드를 등록시키는 것입니다. 전달되는 인자와 반환 형식만 일치한다면 프레임워크 코드는 사용자가 작성한 객체와 타입을 고려하지 않습니다. 등록된 메소드만 감지하여 실행 Invoke 하는 것입니다. (나중에 객체지향 접근에서 다시 설명해보겠습니다.)

 

 

 

'Studying > CS Knowledge' 카테고리의 다른 글

Transaction(트랜잭션)  (0) 2022.08.17
Stateful & Stateless  (0) 2022.08.11
OSI 7 Layer  (0) 2022.06.18
가상 메모리  (0) 2022.04.25
캐시 메모리  (0) 2022.04.22