개인 과제를 하는 도중에
Cart cart;
Food(Cart cart) {
this.cart = cart;
}
이러한 구조를 짜게 되었는데 ( Food 클래스에 속성과 생성자를 만듬)
클래스의 멤버 변수로 Cart 타입의 cart 변수를 선언하게 된건데
이러한 방식이 가능한지 처음 알게 되었다.
이러한 방식을 Dependency Injection이라고 하는데
객체 간의 의존관계를 외부에서 주입해주는 설계 패턴이라고 한다 ( GPT 피셜 )
의존성 주입을 사용하지 않은 방식과 사용한 방식
1. 의존성 주입을 안 쓴 경우 :
public class Food {
Cart cart = new Cart(); // 직접 생성
public void showCart() {
System.out.println("장바구니: " + cart);
}
}
2. 의존성 주입 ( DI )을 사용한 경우
public class Food {
Cart cart;
public Food(Cart cart) { // 생성자 주입
this.cart = cart;
}
public void showCart() {
System.out.println("장바구니: " + cart);
}
}
==========================================================
Cart myCart = new Cart();
Food food = new Food(myCart); // 외부에서 주입
Food는 Cart 객체가 필요하지만 직접 생성하지 않음
대신 외부에서 Cart 객체를 만들어서 전달해줌
이렇게 하는 이유가 있을까?
의존성 주입의 장점!
유연성 : 나중에 Cart를 다른 방식으로 바꾸기 쉬움
테스트 용이성 : 테스트용 가짜 객체를 넣기 쉬움
결함도 감소 : 클래스 간의 직접적인 연결이 줄어듦
재사용성 증가 : 객체를 독립적으로 재사용하기 쉬움
결함도란?
한 클래스나 모듈이 다른 클래스나 모듈에 얼마나 의존하고 있는지를 나타내는 정도
쉽게 말해서
A가 B 없이는 제대로 작동하지 못할 정도로 B에 기대고 있다면 A와 B는 결함도가 높다고 한다.