관리 메뉴

The Nirsa Way

[Effective Java 3/E - 객체 생성과 파괴] Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 본문

Development/JAVA

[Effective Java 3/E - 객체 생성과 파괴] Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

KoreaNirsa 2025. 6. 18. 17:08
반응형
자원을 직접 명시할 경우

객체가 직접 필요한 의존 객체를 생성하지 말고 외부에서 주입받도록 하여 결합도를 낮추자는 의미로 사용되며 의존 객체 주입 패턴이라고 불리웁니다. 아래의 코드에서는 자원을 직접 명시하여 특정 구현체에 대하여 강하게 결합된 형태를 확인할 수 있습니다.

public class MailService {
    private final MailSender mailSender;

    public MailService() {
        this.mailSender = new SmtpMailSender(); // 직접 객체 생성
    }

    public void sendWelcomeMail(String email) {
        mailSender.send(email, "어서오세요.", "참여해주셔서 감사합니다.");
    }
}

또는 아래와 같이 구현될 수 있습니다.

public class MailService {
    private final MailSender mailSender = new SmtpMailSender();

    private MailService(){};

    public static void sendWelcomeMail(String email) {
        mailSender.send(email, "어서오세요.", "참여해주셔서 감사합니다.");
    }
}

이렇게 직접 객체를 생성하여 주입하게 되면 강하게 결합되어 확장성이 떨어지기 때문에 유연성, 재사용성, 테스트 용이성이 떨어지게 됩니다.


의존 객체 주입 패턴

의존 객체 주입 패턴은 우리가 알게 모르게 자주 사용되어왔던 패턴으로써 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식입니다. 자신이 사용할 객체를 직접 생성하지 않고 외부로부터 주입받는 패턴으로써 주입받는 자원은 인터페이스, 추상 클래스 타입등으로 받으면 결합도가 낮아지며 테스트 용이성이 확보됩니다.

public class MailService {
    private final MailSender mailSender;

    public MailService(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendWelcomeMail(String email) {
        mailSender.send(email, "어서오세요.", "참여해주셔서 감사합니다.");
    }
}

 

반응형