jh8579.log
로그인
jh8579.log
로그인
의존성 주입 방법
지노
·
2021년 6월 19일
팔로우
0
학습 로그
0
DI(Dependency Injection)
Spring Conatiner는 Lifecycle 뿐 아니라, 의존성 주입까지 담당한다.
의존성 주입 방법
생성자 주입(Constructor-Based Dependency Injection)
생성자 주입은 생성자에 의존성 주입을 받고자 하는 field를 나열하는 방법으로, 권고되는 방법의 하나
장점
필수적으로 사용해야 하는 레퍼런스 없이는 인스턴스를 만들지 못하도록 강제함
Spring 4.3 이상부터는 생성자가 하나인 경우 @Autowired 를 사용하지 않아도 됨
Circular Dependency / 순환 참조2 의존성을 알아 차릴 수 있음
생성자에 점차 많은 의존성이 추가 될 경우 리패토링 시점을 감지 할 수 있음
의존성 주입 대상 필드를 final로 불변 객체 선언할 수 있음
테스트 코드 작성시 생성자를 통해 의존성 주입이 용이함
단점
어쩔 수 없는 순환 참조는 생성자 주입으로 해결하기 어려움
가급적이면 순환 참조가 발생하지 않도록 하는 것이 더 중요
필드 주입(Field-Based Dependency Injection)
member field에 @Autowired annotation을 선언하여 주입
장점
가장 간단한 선언 방식
단점
의존 관계가 눈에 잘 보이지 않아 추상적이고, 이로 인해 의존성 관계가 과도하게 복잡해질 수 있음
반대로 Constructor injection과 Setter injection은 의존성을 명확하게 커뮤니케이션 함
이는 SRP / 단일 책임 원칙에 반하는 안티패턴?
DI Container와 강한 결합을 가져 외부 사용이 용이하지 않음
단위 테스트시 의존성 주입이 용이하지 않음
의존성 주입 대상 필드가 final 선언 불가
Setter 주입(Setter-Based Dependency Injection)
장점
의존성이 선택적으로 필요한 경우에 사용
생성자에 모든 의존성을 기술하면 과도하게 복잡해질 수 있는 것을 선택적으로 나눠 주입 할 수 있게 부담을 덜어줌
생성자 주입 방법과 Setter 주입 방법을 적절하게 상황에 맞게 분배하여 사용
단점
의존성 주입 대상 필드가 final 선언 불가
지노
Spring Framework를 이용한 웹 개발과 AWS 서비스, Container를 사용한 CI/CD 인프라에 관심이 있습니다.
팔로우
이전 포스트
정적 팩토리 메소드
다음 포스트
의존성 주입 방법
0개의 댓글
댓글 작성