*인프런 김영한 강사님의 강좌를 토대로 정리한 내용입니다.*
기존의 프로그램에서 클라이언트의 구현 객체가 프로그램의 제어 흐름을 스스로 관리했다(라이브러리). 하지만 프레임워크를 활용하게 되면 구현 객체는 자신의 로직을 실행하는 역활만 담당하여 제어의 흐름을 프레임워크에게 넘기게 된다. 이렇게 프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리하는 것을 제어의 역전이라고 한다.
프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라고한다. 개발자가 이런 프레임워크를 활용하여 애플리케이션을 완성시키는 작업을 해야한다.
라이브러리는 간단하게 개발자가 만든 클래스들 중에서 필요한 것들을 호출하여 사용하는 것이다.
프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣으며 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있다.
출처: https://webclub.tistory.com/458 [Web Club]
주문의 역활을 담당하는 OrderService 객체가 회원을 저장하는 인터페이스MemberRepository에 의존한다고 할때, 해당 인터페이스를 구현한 어떤 객체가 OrderService에 주입될지 알 수 없다는 것이다.
주문의 역활을 담당하는 OrderService 객체가 회원을 저장하는 인터페이스MemberRepository에 의존한다고 할때, 런타임시에 프레임워크에서 동적으로 주입하는 인스턴스에 따라 의존관계가 결정된다.