본문 바로가기
우테코 프리코스/프리코스 오픈미션

의존성을 주입 하라고요?

by sloth365 2025. 11. 7.
public class Game {

    private final Output output;
    private final Validator validator;
    private final OptionSelector optionSelector;

    public Game() {
        output = new Output();
        validator = new Validator();
        optionSelector = new OptionSelector();
    }
}

나는 이렇게 구현하는 것이 더 깔끔해 보였다.

왜냐하면 클라이언트 측에서도 Game()을 만들 때 다른 객체들을 만들어서 넣어주지 않아도 되고

외부에서 무엇을 인수로 넣어야 하는지 알 필요도 없다.

 

그런데 코드 리뷰를 하다보니 의존성을 주입하는 것이 유지 보수하기 쉬울 것이라고 들었다.

왜지? 더 깔끔해보이는데 왜 안 좋은 코드일까?

 

public class Game {

    private final Output output;
    private final Validator validator;
    private final OptionSelector optionSelector;

    public Game(Output output, Validator validator, OptionSelector optionSelector) {
        this.output = output;
        this.validator = validator;
        this.optionSelector = optionSelector;
    }
}

이렇게 의존성을 주입해주면 이 클래스를 테스트하기 편해진다.

생성자에서 직접 생성해버리면 테스트 과정에서 의존성을 바꿀 수가 없다.

바로 결합도가 높아지는 것이다.

 

하지만 의존성 주입을 하면 테스트 과정에서 임의의 클래스를 생성해서 주입해 줄 수 있기 때문에

테스트할 때 유연성이 증가하는 것 같다.

 

그럼 유도리있게 필요할 때는 의존성 주입을 사용하면 되는 거 아닌가요?

그 문제는 미래에는 어떻게 작용할지 모르기 때문에 불확실성을 미리 방지하는 것이 아닌가 생각한다.

그리고 일관성도 높이기 위해서 특별한 경우가 아니라면 의존성은 주입해 주자.