반응형
의존성 주입(dependency injection) 타입의 종류는 무엇이 있을까요?
- 정답은 아래와 같습니다.
- constructor injection
- setter injection
우선 생성자(constructor) 주입에 대해서 알아볼께요.
- 말 그대로, 생성자 주입은 의존성 주입을 위해서 생성자를 이용하는 것입니다.
- 그럼 예시를 통해서 알아볼까요?
- 예시
- 위코드를 실행하면, 아래로그가 찍히게됩니다.
- 로그예시
- Autowiring by type from bean name 'BusinessThubServiceImpl' via constructor to bean named 'dataThubServiceImpl'
- 로그예시
그럼, setter 주입에 대해서 알아볼께요.
- 역시나, setter 주입은 의존성 주입을 위해서 setter를 이용하는 것입니다.
- 그럼, 또 예시를 통해서 알아볼까요?
- 예시
but, 솔직히 setter 주입을 사용하기 위해서는 setter 메소드를 선언할 필요조차 없습니다.
- 왜냐하면, 변수에 @Autowired를 지정하면 Spring은 자동으로 setter 주입을 사용하게 됩니다.
- 다시말해서, DataThubService의 setter 주입에 필요한 코드는 아래와 같습니다.
- 예시
그럼, 위에서 알아본 constructor 와 setter 주입간 차이점을 알아보자.
- constructor injection
- 필수적인 의존성 주입에 유용함.
- 게다가 final을 선언할 수 있으므로 객체가 불변하도록 할 수 있음.
- 또한 순환 의존성도 알 수 있음.
- 그로인해 나쁜 디자인 패턴인지 아닌지 판단할 수 있게됨.
- 스프링 4.3버전부터는,
- 클래스를 완벽하게 DI 프레임워크로부터 분리할 수 있게됨.
- 단일 생성자에 한해 @Autowired를 붙이지 않아도 된다고함
- 이러한 장점들 때문에 스프링 4.x 에서는 더이상 Setter Injection이 아닌 Constructor Injection을 권장함.
- 굳이 Setter Injection을 사용한다면
- 합리적인 디폴트를 부여할 수 있고 선택적인(optional) 의존성을 사용할 때만 사용해야한다고 말함.
- 그렇지 않으면 not-null 체크를 의존성을 사용하는 모든 코드에 구현해야된다고 함.
- setter injection
- 위에서 알아본거와 같이, 선택적인 의존성을 사용할 때 유용함.
- 상황에 따라 의존성 주입이 가능하다.
- 스프링 3.x 에서는 Setter Injection을 추천했었음.
결론
- 의존성 주입(dependency injection) 타입의 종류는 constructor/setter injection 이 있음.
- setter injection은 선택적인 의존성을 사용할 때 유용함. 그외의 부분에서는 constructor injection을 사용하면됨.
- 오늘도 Spring 관련 의존성 주입 종류에 대한 마술(?) 한가지 획득완료! 감사합니다. ^^
300x250
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
9.Spring, 자바(JAVA) 관련 웹 애플리케이션 아키텍처와 스프링 MVC에 대해서 알아보자. (0) | 2021.01.02 |
---|---|
8.Spring, 스프링 빈(Bean) 스코프와 중요한 어노테이션에 대해서 알아봅시다. ^^ (0) | 2021.01.02 |
6.Spring, 스프링 IoC 컨테이너에 대해서 이해한번 해봅시다. ^^ (0) | 2021.01.02 |
5.Spring, 의존성 주입에 대해서 이해한번 해봅시다. ^^ (0) | 2021.01.02 |
4.Spring, 스프링 프레임워크 5.0 의 새로운 기능에 대해서 알아볼까요?^^ (0) | 2021.01.02 |