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;
}
}
이렇게 의존성을 주입해주면 이 클래스를 테스트하기 편해진다.
생성자에서 직접 생성해버리면 테스트 과정에서 의존성을 바꿀 수가 없다.
바로 결합도가 높아지는 것이다.
하지만 의존성 주입을 하면 테스트 과정에서 임의의 클래스를 생성해서 주입해 줄 수 있기 때문에
테스트할 때 유연성이 증가하는 것 같다.
그럼 유도리있게 필요할 때는 의존성 주입을 사용하면 되는 거 아닌가요?
그 문제는 미래에는 어떻게 작용할지 모르기 때문에 불확실성을 미리 방지하는 것이 아닌가 생각한다.
그리고 일관성도 높이기 위해서 특별한 경우가 아니라면 의존성은 주입해 주자.
'우테코 프리코스 > 프리코스 오픈미션' 카테고리의 다른 글
| 게임 진행을 어떻게 제어할까? (0) | 2025.11.09 |
|---|---|
| EnumMap 클래스란? (0) | 2025.11.09 |
| 객체를 분리하는 기준이 뭘까? (0) | 2025.11.07 |
| Facade 패턴이 뭐야? (0) | 2025.11.06 |
| 전략 패턴은 어떻게 사용하는 걸까? (0) | 2025.11.06 |