프레임워크(Framework) 는 말 그대로 work 하기 위한 frame 이다. 이 말을 풀면, 개발을 하기 위한 틀, 뼈대, 기반 구조라고 할 수 있다. 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있으며, 완성된 어플리케이션이 아닌 프로그래머가 완성시키는 작업을 해야한다고 한다.
개발자는 이 프레임워크가 제공해주는 방식대로, 우리는 이 틀 위에서 원하는 방식으로 원하는 프로그래밍을 하면 된다.
라이브러리(Library) 는 프로그래머가 완성을 시켜야 하는 프레임워크와는 다르게 이미 완성되어 있다. 라이브러리는 단순 활용가능한 도구들의 집합을 말하고, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있다. 도서관에서 책을 꺼내서 참고하듯이, 라이브러리 사용자는 라이브러리의 개발자가 어떠한 개발을 하기 위해 미리 만들어놓은 클래스 및 함수, 컴포넌트들을 다운 받아 사용하는 것이다.
이 둘의 큰 차이점은 제어의 주도권이라고 한다. 프레임워크(Framework) 는 사용자가 프레임워크 안에 들어가 개발을 한다는 느낌으로, 전체적인 제어 흐름, flow는 프레임워크가 주도한다. 개발자가 구현한 것들은 프레임워크에 의해 호출되고 제어되며, 이를 '제어의 역전(Inversion of Control)'이라고 한다.
라이브러리(Library) 는 자신이 원하는 기능을 제공하는 라이브러리를 필요에 따라 가져다 쓰는 느낌으로 전체적인 흐름의 주도성은 사용자가 가지고 있다.
reference: https://webclub.tistory.com/458