본문 바로가기

Spring

Spring) DI(의존성 주입)의 3가지 방식

 

DI란 

의존성 주입으로 내부에서 객체의 연관관계를 맺는것이 아닌 외부에서 연관관계가 맺어진 객체를 가져와 사용하는 것으로 특정 객체가 필요한 객체를 외부에서 가져와 사용하는 방식입니다.

 

DI 방식

의존성 주입에는 다음의 3가지 방법이 있습니다.

1. 생성자 주입 방식

2. 필드 주입 방식

3. Setter 주입 방식


1. 생성자 주입

//생성자에 @Autowired 어노테이션을 붙여 주입

 

//단일 생성자는 @Autowired 생략 가능

//@RequiredArgsConstructor을 통해 생성자 생성 생략

 

2. 필드 주입

//필드에 @Autowired 어노테이션을 붙여 주입

3. Setter 주입

set 메소드에 @Autowired 어노테이션을 붙여 주입


생성자 주입을 권장하는 이유

 

1. 순환 참조 방지

a가 b를 참조하면서 b가 a를 참조하는 경우에 발생하는데

필드주입을 통해 순환참조가 일어났을 경우에는 정상적으로 동작이 되다가 해당 메서드가 실행되면 순한참조가 발생하여 동작을 멈추게 됩니다. 이렇게 되면 메서드의 실행 시점 전 까지 순환 참조가 있더라도 알 수 없다는 단점이 있습니다.

하지만 생성자 주입을 통해 순환참조가 일어난 경우에는 실행 단계에서 순환참조가 발생하여 실행이 되지 않고 바로 순환참조를 확인 할 수 있기 때문에 생성자 주입을 권장합니다.

그 이유로는 필드 주입은 빈을 생성한 후 주입하려는 빈을 찾아 주입하지만

생성자 주입은 주입하려는 빈을 찾고 객체의 생성 시점에서 빈을 주입하기 때문에 오류가 발생하기 때문입니다.

 

2. 불변성

필드주입은 final을 선언 할 수 없지만 생성자 주입은 final로 선언 할 수 있기 때문에 객체의 불변성이 보장됩니다.

3. 테스트 용이

필드 주입의 경우에는 별도의 처리를 통해 테스트를 진행해야되지만 생성자주입은 객체를 생성한뒤 생성자에 넣어주기만 해도 테스트가 가능하기 떄문에 테스트 코드 작성에 용이합니다.

 

 


참고자료

https://dev-coco.tistory.com/70

https://jackjeong.tistory.com/41

https://mangkyu.tistory.com/125

 



Calendar
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
더보기
Archives
Visits
Today
Yesterday