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

프레임워크와 라이브러리는 혼용해서 사용하는 경우가 많은데 분명히 다른 의미이다.

먼저, 각각의 뜻을 알아보도록 하자.

프레임워크(Framework)

프레임워크를 말 그대로 뼈대 즉, 프로그램 구현에 있어서 큰 구조를 결정하고 흐름을 제어하는 역활을 한다. 개발자는 그 위에서 코드를 기술하고 프레임워크는 개발자가 기술한 코드를 흐름에 맞게 실행을 해준다. 대표적인 프레임워크로는 Spring framework, .NET framework 등이 있다.

마이크로소프트웨어 2006/8월호 130쪽 “프레임워크 활용전략"에서

GoF의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson) 교수는 프레임워크를 “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"이라고 정의하였다. 프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐 아니라, 그 위에 개발된 개발자의 코드를 제어한다. 프레임워크는 구체적이며 확장 가능한 기반 코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다.

라이브러리(Library)

라이브러리는 자주 사용되는 로직들의 모음 혹은 묶음이라로 할 수 있다. 자주 쓰는 메소드 및 함수들을 미리 구현해 놓고, 프로그램에 추가해서 사용하는 형태가 된다. 개발자는 미리 만들어 놓은 기능들을 사용하기 편하고 빠르게 개발을 진행할수 있게 된다. 대표적인 라이브러리로는 jQuery, Apache commons library 등이 있다.

프레임워크와 라이브러리의 차이점

프레임워크와 라이브러리는 큰 차이는 점은 제어 흐름의 주도권이 어디에 있는가에 있다.

프레임워크는 전체적인 흐름을 제어하고 있으며 개발자는 그 안에서 필요한 코드를 넣는 반면에 라이브러리는 개발자가 전체적인 흐름을 만들며 라이브러리를 사용하는 것이라 할 수 있다.

비유적인 표현으로는 자동자가 프레임이라면 거기에 속한 바퀴, 핸들 등은 라이브러리라라고 할 수 있다.

이렇듯 이미 구현된 프로그램에서 라이브러리를 비교적 쉬울 수 있으나, 프레임워크를 변경하는 것은 모든 기반을 다 흔드는 작업이 되어버린다.

토비의 스프링3. 1장 오브젝트와 의존관계 p.95에서

프레임워크도 제어의 역전 개념이 적용된 대표적인 기술이다. 프레임워크는 라이브러리의 다른 이름이 아니다. 프레임워크는 단지 미리 만들어 둔 반제품이나, 확장해서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다. 프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다. 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다. 단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다. 반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다. 보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이다. 최근에는 툴킨, 엔진, 라이브러리 등도 유행을 따라서 무작정 프레임워크라고 부르기도 하는데 이는 잘못된 것이다. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다. 애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 한다.

참조