프레임워크? 라이브러리? 쉽게 이해하기

프레임워크(Framwork)

이미 완성되어 있는 뼈대, 틀을 의미하며, 우리는 제공된 틀안에서 주어진 규칙을 지켜가며 사용합니다.

 

쉽게 예를 들면 우리가 성공해서 건물을 하나 올린다고 생각해봅시다.

건물으 세운다면 그저 우리가 원하는데로 막 지울 수 있는 것이 아니라 나라에서 정한 건축법에 따라 그 규칙에 맞게 지을 수 있습니다.

 

Java의 Spring에서 규칙 하나를 예를 들면 정적 리소스는 resources/static 폴더에, 동적 리소스는 resources/template 폴더에 담는 규칙이 있죠.

 

우리는 이미 완성되어 있는 프레임워크를 정해진 규칙에 맞게 사용하여 필요한 기능을 직접 구현할 필요 없이 원하는 기능을 구현하는데 더 집중할 수 있습니다.

 

프레임워크 예
  • Java 서버 개발에 사용되는 Spring
  • Python 서버 개발에 사용되는 Django
  • 안드로이드 앱 개발에 사용되는 Android

라이브러리(Library)

어떤 특정한 기능을 구현하기 위해 작은 기능들을 함수 단위로 제공하는 함수들의 집합으로

필요할 때 자유롭게 가져다 사용하는 개념, 일종의 도구입니다.

라이브러리는 프레임워크처럼 정해진 규칙에 따라 개발하는 것이 아니라 규칙을 사용자가 직접 정하여 사용합니다.

 

공구 상자를 예를 들면 공구 상자에는 망치, 톱 등의 여러 공구가 있습니다.

만약 망치를 사용한다면 이 망치는 무언가를 두드리는 기능을 합니다.

못을 박을 때 사용하든, 어떤 물건을 부시기 위해 사용하든 우리는 이 망치를 어떻게 사용할 지 직접 결정하게 됩니다.

 

라이브러리 예
  • Node.js에서 npm으로 설치한 모듈
  • build.gradle의 dependency에 추가한 라이브러리
  • UI개발에 사용되는 React

프레임워크(Framwork)와 라이브러리(Library)의 핵심 차이점

프레임워크와 라이브러리 차이점의 핵심은 바로 "제어 흐름의 권한"이 어디에 있는지입니다.

내가 코드를 컨트롤하는지 vs 누군가의 규칙을 따라 코딩하는건지

 

프레임워크를 사용할 때는 프레임워크의 규칙을 따라서 사용해야 하는데

이는 곧 사용자가 프레임워크가 짜 놓은 틀 속의 규칙에 맞춰 개발을 하므로 프레임워크가 제어의 권한을 갖게 됩니다. (제어의 역전)

 

반면에 라이브러리를 사용할 때는 사용자가 필요한 기능이 있을 때 그 기능을 제공하는 라이브러리를 호출하여 만들어져 있는 함수나 코드를 사용하므로

사용자가 제어의 권한을 갖습니다.

 

제어의 역전 (IoC)

제어의 역전이란, 개발자가 해왔던 일(제어)을 프로그램이 대신 해준다는 의미로

여기서는 위에 설명했듯이 프레임워크의 규칙에 따라 개발을 해야하므로 프레임워크가 제어의 권한을 갖기 때문에 

원래 개발자가 갖고 있어야할 제어권을 프레임워크가 대신 제어 하도록 제어권을 위임하는 것을 "제어권이 역전되었다" 라는 뜻에서 제어의 역전이라고 합니다.