의존성 주입(Dependency Injection)
포스트
취소

의존성 주입(Dependency Injection)

Effective Java 3/E 중 -

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

의존성 주입이란, 간단하게 말해서 어떤 자원에 대한 작업을 정적 유틸리티 클래스나 싱글톤 패턴을 이용하여 처리하는 대신, 하나의 객체가 다른 객체에 의존성을 갖게 하여 사용하는 자원에 따라 동작이 달라지게 하는 것이다.

인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨줌으로서 넘겨준 객체에 대한 의존성을 갖게 하는 것이 의존성 주입의 한 형태이다.

`public class LottoChecker {
    private final Lotto lotto;

    public LottoChecker(Lotto lotto) {
        this.lotto = Objects.requireNonNull(lotto);
    }

    public boolean contains(LottoNumber lottoNumber) { ... }
    public WinningPrize checkPosition() { ... }
}`

로또 미션의 일부분을 의존성 주입을 이용해 다시 짜 보면 이렇게 될 것이다. 기존에 Lotto 클래스에서 다 하던 번호 맞춰보기, 등수 찾기 등의 작업을 로또를 검증하는 클래스를 하나 더 만들어 자원을 포장한 클래스와 자원을 필요로 하는 행위를 분리하여 유연성과 테스트 용이성을 개선해 준다.

물론 로또 미션에 적용시켜 볼 경우에는 로또 객체는 언제나 랜덤한 6개의 숫자를 가지고 있을 뿐이고 그외에 객체마다 다른 특성이 존재하지 않기 때문에 여기에 의존성 주입을 적용하는 것은 오버일 수 있다. 단지 테스트 코드를 짤 때 로또번호를 간편하게 생성하는 테스트 전용 클래스를 만들어 전략 패턴을 적용하는것도 활용 방안일 수 있겠다.

앞으로 배우게 될 스프링(Spring) 프레임워크도 이 의존 객체 주입을 통해 구현된다고 한다.

This post is licensed under CC BY 4.0 by the author.

이 또한 지나갈 겁니다.

Objects 클래스가 제공하는 유틸리티 메소드

Comments powered by Disqus.