프레임워크와 라이브러리 차이점
21 May 2020 | framework library개인 공부 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!
프레임워크
프로그램 개발에 투입되는 개발자들이 늘어남에 따라서(특히 객체지향 프로그래밍) 다양성 또한 비례되어 늘어나고, 전체 시스템의 통일 & 일관성의 부족함을 느끼게 되었다. 그래서 개발자의 자유를 제한하는 대신 일정한 테두리 안에서 일관되고 유지 보수를 쉽게 개발할 수 있는 환경인 프레임워크를 도입했다. 즉 프레임워크는 기본적인 뼈대가 이미 완성되어 있고 규칙이 존재하는 개발환경 을 생각하면 쉽게 이해 가능하다.
우리가 꼭 개발이 아니더라도 무언가를 조립하고자 물건을 구매했을때 기본적인 뼈대는 주어지는 상태에서 물건을 조립하게 된다. 책장을 조립한다고 하면 기본적으로 책장을 조립하는 뼈대는 비슷할 것이고 그 뼈대 안에서 원하는 책장을 조립해나가는 과정을 생각해보도록 하자. 즉, 특정한 틀을 만들어 놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들 때 작업시간을 줄여주게 된다. 뼈대가 이미 만들어져 있어 거기에 살만 덧붙이면 완성이 되도록 공통된 함수 또는 클래스를 미리 만들어 놓는 것을 의미한다.
- 개발자들이 따라야 할 가이드라인을 가진다.
- 개발할 수 있는 범위가 정해져있다.
- 개발자를 위한 다양한 도구들이 지원된다.
프레임워크는 뼈대나 기반구조. 프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같이 어느 정도의 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면된다.
프레임워크 장단점
- 장점
- 개발 편의성 증가로 시간 단축에 용이
- 오류의 폭을 감소
- 코드 품질의 보장(어느정도)
- 유지보수에 용이
- 단점
- 프레임워크 의존도가 높아지면 개발 능력이 저하됨
- 개발자의 자유도 저하
라이브러리
개발을 하다보면 공통적으로 반복되어 사용되는 기능들이나 특정한 기능들을 자주 마주하게 되고 그때마다 새로 알고리즘 혹은 코드를 짜는 것은 매우 비효율적이다. 따라서 잘 만들어진 모듈화된 코드를 가져다 쓰는 것이 간편하고 안정적인 필요와 수요가 생기며 만들어진 것으로 개발 시 활용 가능한 도구들을 모아 모듈화한 것 이라고 이해하면 된다.
잘 만들어진 네이게이션이 있다고 하자. 그러면 우리는 네비게이션을 만들기 위해 처음부터 하나하나 기능을 구현하기 보다는 잘 만들어진 네이게이션 기능을 쏙쏙 내가 원하는 곳에 넣어주면 된다. 즉 여러 라이브러리중에서 우리가 원하는 함수, 클래스들을 가져다 쓰는 것을 의미한다.
라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합. 프로그래머가 어떠한 기능을 수행하기 위해서 도움을 주는 또는 필요한 것을 제공해주는 역할을하는 것이죠. 간단히 정리를 하자면 프로그램 기능 수행을 위해 활용 가능한 도구의 집합이다.
둘 사이의 차이점
프레임워크는 개발자들의 환경을 제한하는 대신 일정한 환경을 제공한다. 그러나 라이브러리는 내가 우너하는 코드를 내가 원할 때 원하는 곳에 가져다 넣으면 된다. 이때 환경은 없고 오로지 의도와 목적성만이 존재한다.
프레임워크는 단지 미리 만들어 둔 반제품이나, 확장해서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다.
프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.
라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 합니다.
애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 합니다.
프레임워크는 전체적인 흐름을 자체적으로 가지고 있어 프로그래머는 그 안에서 필요한 코드를 작성한다. 반면에 라이브러리는 프로그래머가 전체적인 흐름을 가지고 있어 라이브러리를 자신이 원하는 기능을 구현하고 싶을 때 가져다 사용할 수 있다. 흐름에 대해서 잘 이해하시는 것이 가장 중요하다.
간단히 프레임워크는 가져다가 사용한다는 것보다는 프레임워크라는 특정 공간에 들어가서 사용한다는 느낌이 더 강하다고 말할 수 있으며 라이브러리는 라이브러리 자체를 가져가 사용하고 호출하는 용도로 사용된다고 생각하시면 쉽게 이해하실 수 있을 것이다.