본문 바로가기
컴퓨터 프로그래밍/Spring

[Spring] Ioc (제어의 역전) 와 DI (의존성 주입)

by 한33 2024. 8. 16.

IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF 의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴

 

강하게 결합되어 있는 Consumer 와 Chicken

코드는 정상적으로 작동하겠지만, Consumer 가 chicken 이 아니라 pizza 가 먹고싶다면 코드 수정이 불가피함

 

약하게 결합되어있는 Consumer 와 Chicken, Pizza

interface 다형성의 원리를 사용해서 고객이 어떤 음식을 요구하더라도 쉽게 대처할 수 있음.


그럼 여기에 어떻게 주입할까?

1. 필드에 직접 주입

2. 메서드를 통한 주입

3. 생성자를 통한 주입

 

필드에 직접 주입

Food를 Consumer에 포함 시키고 Food에 필요한 객체를 주입받아 사용

 

메서드를 통한 주입

set 메서드를 사용하여 필요한 객체를 주입받아 사용

 

생성자를 통한 주입

생성자를 사용하여 필요한 객체를 주입받아 사용


이전에 강한 결합에서는 Consumer → Food 로 제어의 흐름이 이어졌는데, 이를 해결하기 위해서 Food 를 Consumer 에게 전달해주는 식으로 변경함으로써, Consumer 은 추가적인 코드 수정 없이 어느 Food 가 들어오든 전부 처리할 수 있게 되었다. 

결과적으로 제어의 흐름이 Food → Consumer 로 역전되었다고 볼 수 있다.