728x90

자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

 

의존이란?

객체지향 프로그래밍에서 한 객체가 다른 객체를 이용한다는 것은, 다른 객체를 생성하거나 다른 객체의 메소드를 호출하는 행위를 말한다.

한 객체가 다른객체를 생성 또는 메소드를 호출할 때, 그 객체에 의존한다고 표현한다.

 

public class Cage
{
    private Animal animal;
    
    public Cage()
    {
        this.animal = new Cat();
    }
    
    public void animalHello()
    {
        animal.hello();
    }
}

public class Animal
{
    ...
}

public class Cat extends Animal
{
    ...
}

public class Dog extends Animal
{
    ...
}

위 코드에는 문제가 있다.

 

결합도

Cage 클래스와 Animal 클래스가 강하게 결합되어있다.

 

이 경우 Cage의 구현이 변경되거나 다른 동물을 사용해야할 경우 Cage의 클래스도 수정해야한다.

 

 

의존 객체 주입(DI)

DI가 위 문제의 해결법이 된다.

 

Cage의 동물을 고정해서 사용하는 것이 아닌, 인스턴스를 생성할 때 필요한 동물을 생성자에 넘겨주는 방법이다.

 

public class Cage
{
    private Animal animal;
    
    public Cage(Animal animal)
    {
        this.animal = Objects.requireNonNull(animal);
    }
    
    public void animalHello()
    {
        animal.hello();
    }
}

public class Animal
{
    ...
}

public class Cat extends Animal
{
    ...
}

public class Dog extends Animal
{
    ...
}

위 코드로 하면 인스턴스를 생성할 때 필요한 동물을 넘겨줄 수 있다.

 

 

장점

  • 유연성이 높다.
  • 테스트가 용이하다.

단점

  • 의존성이 많을수록 코드가 오히려 어지럽다.

 

 

728x90

+ Recent posts