의존성 주입[Dependency Injection]

jooog·2021년 10월 5일
0

Dependency Injection(의존성 주입)

의존성주입이란 코드를 단순화시키고 개방-폐쇄(OCP) 원칙에 따라 프로그래밍을 하는 것을 말한다.

public interface Price {

    int addPrice();
}



public class PricePolicy implements Price{

    private int Amount = 10;


    @Override
    public int addPrice() {

        System.out.println("add price");
    }
}

PricePolicy는 interface Price의 구현 클래스다.

public class Order implements OrderService {

    Price price = new PricePolicy();
    
}

또 다른 인터페이스인 OrderService를구현한 클래스 Order에서 PricePolicy 객체를 생성했다.

Dependency Injection이란?

만약 인터페이스 Price를 구현한 클래스가 PricePolicy에서 변경된다면 직접 코드를 수정해야한다.

이렇게 코드를 직접 수정하는 것은 객체지향의 원리 중 하나인 개방 폐쇄 원칙 (OCP)에 어긋난다.

그렇다면 개방 폐쇄 원칙 (OCP)은 무엇일까?

확장에는 열려 있어야 하고, 변경에는 닫혀있어야 한다

그렇다면 Dependency Injection(의존성 주입)으로 개방 폐쇄 원칙을 지켜 코드를 리팩토링 해보자

public class Order implements OrderService {

    private final Price price;
    
    public Order(Price price) {
        this.price = price;
        
    }
    
}

생성자를 통해 구현 클래스를 주입받을 수 있도록 만든다.

그리고 구현 클래스를 주입시켜줄 수 있도록 별도의 파일로 코드를 분리한다.

public OrderService orderService() {
        return new Order(price());
    }
    
    
public Price price() {

	return new PricePolicy();

}

위의 코드를 보면 로직이 변경될 때 마다 모든 코드를 수정해줄 필요 없이 한 파일 안에서 변경이 가능하다.

즉, price 인터페이스를 구현하는 클래스가 변경되면 price의 return 값만 변경하면 된다.

이렇게 확장에는 열려있고 변경에는 닫혀있는 OCP 원칙을 지킬 수 있다.

0개의 댓글