[Spring]/Spring 기본

IoC(Inversion of Control) & DI(Dependency Injection)

팡펑퐁 2022. 10. 12. 00:44
728x90

IoC(Inversion of Control)

  • 제어의 역전이라는 뜻으로 프로그램의 제어 흐름을 개발자가 아닌 외부에서 관리하는 것을 말한다. 
  • 애플리케이션 흐름의 주도권이 뒤바뀐 것으로 스프링이 주도권을 갖는다.

 

DI(Dependency Injection)

  •  IoC 개념을 조금 구체화시킨 것으로 의존성을 주입하는 것을 뜻한다. DI는 객체 간의 관계를 느슨하게 해 준다.

 

의존성 주입의 예

 A 클래스가 B 클래스의 기능을 사용할 때 'A클래스는 B클래스에 의존한다'라고 한다.

-> 'A 클래스의 프로그래밍 로직에 B 클래스가 필요하다.' 즉, B 클래스에게 의지(의존)한다.

 

  • 클래스 내부에서 다른 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립한다.
  • 클래스 내부에서 new를 사용해 참조할 클래스의 객체를 직접 생성하지 않고, 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달받고 있다면 의존성 주입이 이루어지고 있는 것이다.
  • new 키워드를 사용하여 객체를 생성할 때, 클래스 간에 강하게 결합(Tight Coupling)되어 있다고 한다.
  • 어떤 클래스가 인터페이스 같이 일반화된 구성 요소에 의존하고 있을 때, 클래스들 간에 느슨하게 결합(Loose Coupling)되어 있다고 한다.
  • 객체들 간의 느슨한 결합은 요구 사항의 변경에 유연하게 대처할 수 있게 한다.
  • 의존성 주입(DI)은 클래스들 간의 강한 결합을 느슨한 결합으로 만들어준다.
  • Spring에서는 애플리케이션 코드에서 이루어지는 의존성 주입을 대신해준다.
728x90