우리는 프레임워크와 라이브러리를 알아보았다. 두 가지 개념은 비슷한 듯 다른 개념인데 이에 대해서 알아보자.
앞서 적은 프레임워크 포스팅과 라이브러리 포스팅의 공통점이 있다. 바로 둘다 코드의 모음이자 집합체라는 것이다. 프레임워크를 설명할 때 소프트웨어나 프로젝트 코드의 틀이라고 설명했는데, 이 틀 또한 '코드로 만들어진 틀'이라고 생각하면 된다.
따라서 두 가지의 개념모두 코드의 집합이라고 볼 수 있다.
모두 코드의 집합이라면, 하나의 의미로 쓰면 되는데 왜 다른 개념으로 쓰이는 것일까?
프레임워크는 라이브러리를 포함한 코드의 집합이고, 간단하게 생각하면 "라이브러리들의 모음"이며, 프레임워크는 라이브러리 보다 더 상위의 큰 개념이라고 생각하면 된다.
무엇보다 라이브러리와 프레임워크의 가장 큰 차이점은 제어 흐름에 대한 책임의 차이가 있다.
라이브러리는 개발자가 코드를 작성하는 데 필요한 도구를 제공한다. 개발자는 라이브러리를 호출하여 필요한 코드를 가져올 수 있지만, 제어 흐름은 개발자가 제어한다.
반면에, 프레임워크는 개발자가 작성하는 코드를 프레임워크가 제어한다. 코드는 개발자가 짜고 제어하여 원하는 위치에서 원하는 동작이 할 수 있도록 작성하는데, 결과적으로 프레임워크는 개발자가 작성한 코드를 가져와 실행한다. 이러한 현상을 제어의 역전(IoC)이라고 부른다. 이는 프레임워크가 프로그램의 아키텍처를 강제하면서 개발자가 작성하는 코드를 더 일관성 있게 만들어 준다.
위의 그림을 옆으로 돌려서 바라보자.
프레임워크가 가장 상위에서 아래로 제어를 하고 있음을 알아 볼 수 있다. 개발자가 작성한 코드가 항상 주도권을 가지는 것이 아니다. 프레임워크라는 가장 큰 틀이 우리가 작성한 어플리케이션의 코드를 불러 동작시키고, 어플리케이션 코드는 따로 외부 라이브러리를 불러서 동작시킬 수 있다.
IoC는 프레임워크의 중요한 특징 중 하나이지만, 모든 프레임워크가 반드시 IoC를 지원해야 하는 것은 아니다.
IoC를 지원하지 않더라도 다른 기능들로 프레임워크로 분류될 수 있다.
필자는 개발을 배울때 javascript언어와 node.js를 사용해서 express라는 프레임워크를 사용했다.
Express 프레임워크는 제어의 역전(IoC)을 지원하지 않지만, 라우팅, 미들웨어, 요청 및 응답 처리 등의 기능을 제공하며, 이를 통해 개발자가 웹 애플리케이션을 보다 쉽게 개발할 수 있다. 이러한 이유로 Express는 여전히 프레임워크로 분류된다.
따라서 프레임워크가 반드시 IoC를 지원해야 하는 것은 아니며, IoC는 프레임워크의 특징 중 하나일 뿐이다.
참고자료(출처)
인파블로그 포스팅 👩💻 프레임워크 & 라이브러리 차이 정리
코드연구소 포스팅 프레임워크(Framework)와 라이브러리(Library)의 차이
용어 정리 - Framework, Library, API
IoC 구현여부가 프레임워크/라이브러리를 절대적으로 단정짓는 게 아니었네요
좋은 내용 배워갑니다!