DI란?
- Dependency Injection 의 준말
- 의존성 주입
- 객체간의 의존성을 스프링 컨테이너가 자동으로 연결해주는 것
- 개발자가 직접 객체를 생성하는 것이 아닌, 외부에서 생성하여 주입 시켜주는 방식
- 외부에서 두객체 간의 관계를 결정해주는 디자인 패턴
- 인터페이스를 사이에 둠으로서
클래스 레벨에서는 의존관계가 고정되지 않도록 하고, 런타임 시에 관계를 동적으로 주입,
유연성을 확보하고 결합도를 낮출 수 있게 해준다
public class House {
private Desk desk;
}
상기 코드에서 House 클래스는 Desk 클래스를 의존한다
다만 이 상태에선 클래스끼리 강하게 결합되어 있다는 것이 문제가 되며,
객체가 아닌 클래스 끼리의 관계이기에, 우리가 추구하는 객체지향과는 거리가 있다
쉽게 생각 해보자
집에 책상만 두고 살 수는 없다
이를 우리는 인터페이스와 다형성이라는 개념을 사용하여 해결한다
public class House {
private Furniture furniture;
public House (Furniture furniture){
this.furniture = furniture;
}
}
가구를 의미하는 Furniture 인터페이스를 만들어서 House 객체를 생성할 때 외부에서 Furniture 객체를 매개변수로 받는다
Desk든 Chair든
받아서 넣어줄 수 있게 되었다
여기에서 DI 컨테이너가 필요하다
House에서 Furniture 객체를 주입하기 위해선,
어플리케이션 실행 시점에, 필요한 객체(빈)를 생성해야한다.
의존성이 있는 두 객체를 연결하기 위해 한 객체를 다른 객체로 주입 시켜야 하기 때문
public class BeanFactory {
public void house(){
// bean 생성
Furniture desk = new Desk();
// 의존성 주입
House house = new House(desk);
}
}
이 개념은 제어의 역전 - IOC 라고 불린다
어떠한 객체를 사용할지에 대한 책임은 프레임워크에게 넘어갔고
자신은 수동적으로 주입받는 객체를 사용하기 때문이다
스프링 컨테이너가 각 클래스의 의존 관계를 bean 설정 정보를 바탕으로 자동으로 결정 및 연결 해주는 것이다
이것이
Inversion Of Control
ioc 이다
스프링한테 떠넘기기... 로 이해하자
이로써 DI와 AOP ( 관점 지향 프로그래밍 ) 이 가능해진다
아래는 제가 직접 손수 수작업으로 하나부터 열까지 전부 직접 작성한 커뮤니티사이트 입니다
신생커뮤니티라서 많이 삭막하지만 들려주시면 고마울 것 같아요!
'프로그래밍 개념 정리' 카테고리의 다른 글
Nginx + 도커로 로드밸런싱을 운영에 적용해보자 (0) | 2024.03.05 |
---|---|
RESTful API란 무엇일까? feat. URI, URL, URN (0) | 2023.02.09 |
디자인 패턴 - MVC1 과 MVC2 의 차이 (0) | 2023.01.17 |