Dependency Indection(DI)

의존성이란?

홍찬기
3 min readMay 10, 2021

의존성이란 하나의 객체가 다른 객체를 사용하면 의존성이 생긴다.
MemberContainer의 save 메소드를 실행하려면 MemberRepository가 있어야한다. MemberContainer가 MemberRepository에 의존성을 가졌기 때문이다.

아래와 같은 경우 MemberRepository를 변경했을경우 MemberContainer도 변경해야 한다.

Class MemberContainer{    private MemberRepository mr = new MemberRepository();    public void save(Long memberId) {
return mr.save(memberId);
}
}

Dependency Indection이란

의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로 부터 필요한 객체를 받아서 사용하는 것이다.

의존성 주입은 크게 두가지 방법이 있다. (스프링에서는 3가지 방법)

  1. 생성자 주입
  2. Setter 주입

생성자 주입

생성자 주입은 객체를 생성자를 통해 주입하는 방법

Class MemberContainer{    private MemberRepository mr;    public MemberContainer(MemberRepository mr) {
this.mr = mr;
}
public void save(Long memberId) {
return mr.save(memberId);
}
}

Setter 주입

setter주입은 객체를 setter를 통해 주입하는 방법

Class MemberContainer{    private MemberRepository mr;    public void setMemberRepository(MemberRepository mr) {
this.mr = mr;
}
public void save(Long memberId) {
return mr.save(memberId);
}
}

위의 두가지 방법중에 권장하는 방법은 생성자 주입이다.

Spring에서 필드 주입

Class MemberContainer{    @Autowired
private MemberRepository mr;
public void save(Long memberId) {
return mr.save(memberId);
}
}

Dependency Injection을 사용해야 하는 이유

DI로 코드를 설계했을때 다음과 같은 이점이 있다.

  • Unit Test가 용이해진다.
  • 코드의 재활용성을 높여준다.
  • 객체 간의 의존성을 줄이거나 없앨 수 있다.
  • 객체 간의 결합도를 낮추고 유연성, 확장성을 향상시킨다.

--

--