본문 바로가기

Study/Spring Framework

[Spring] Dependency Injection

A가 B에 의존한다는 것은 B에 어떠한 변경이 발생했을 때 A에도 영향이 미치는 것을 의미한다. 따라서 의존관계를 느슨하게 맺어서 각 객체 간의 결합도를 낮춰야 한다.

 

Spring에서는 DI(Dependency Injection)을 통해 결합도를 낮출 수 있다.

 

의존성 주입 방식에는 생성자 주입, 멤버 필드 주입, setter 메소드 주입이 있다.

 

생성자 주입 방식

@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {

    private fianl GuestBookDao guestBookDao;
    
    @Autowired
    public GuestBookServiceImpl(GuestBookDao guestBookDao) {
    	this.guestBookDao = guestBookDao;
    }
}

 

특징 :

  • 필수적으로 사용해야 하는 레퍼런스 없이는 인스턴스를 만들지 못하도록 강제한다.
  • 순환 참조 의존성이 발생할 경우 생성자 주입만으로는 해결할 수 없으므로 순환참조 발생을 알아차릴 수 있다.
  • field를 final로 선언 가능하여 객체가 변하는 것을 방지할 수 있다.

멤버 필드 주입 방식

@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {
	
    @Autowired
    private GuestBookDao guestBookDao;
}

 

특징 :

  • 가장 간단하게 선언할 수 있다.
  • 의존 관계가 눈에 잘 보이지 않아 추상적이다.
  • 의존성 대상 field를 final로 선언할 수 없다.

필드 주입 방식은 선호되지 않는 방식이라 지양한다.


Setter 메소드 주입

@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {
	
    private GuestBookDao guestBookDao;
    
    @Autowired
    public void setGuestBookDao(GuestBookDao guestBookDao){
    	this.guestBookDao = guestBookDao;
    }
}

 

특징 :

  • 의존성이 선택적으로 필요할 때 사용한다
  • 의존성 대상 field를 final로 선언할 수 없다.

 

'Study > Spring Framework' 카테고리의 다른 글

[Spring] AOP(Aspect Oriented Programming)  (0) 2021.04.29