00.의존성 주입 프레임워크
CDI와 그 구현물인 Weld, Spring, Guice, Play framework, Salta, Glassfish HK2, Dagger, Managed Extensibility Framework(MEF)와 같은 애플리케이션 프레임워크는 의존성 주입을 지원하지만 필수는 아니다.
0.의존성이란?
게임 플레이어가 게임을 플레이하기위해선 반드시 무기를 가진다.
어떤 특정 객체가 존재하기 위해 꼭 존재해야하는것.
코드상에서는 new키워드로서 객체간의 의존성이 생성된다.
1.의존성 주입이란?
의존성 주입은 각 객체 간의 의존성을 스프링 컨테이너가 자동으로 연결해주는것으로, 개발자가 빈(Bean)설정파일에 의존관계가 필요한 정보를 추가해주면 컨테이너가 자동적으로 연결해줍니다.
개발자가 "직접" 성생하는 방식이아닌 외부에서 생성하여 주입 시켜주는 방식.
의존성 주입은 " loC(Inversion of Control,제어의 역전)원칙 하에" 객체 간의 결합을 약하게 해주고 유지보가 좋은 코드를 만들어준다.
2.의존성 주읩의 이점
-의존관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈간의 결합도를 낮출 수 있다.
-코드의 재사용과 조합이 용이
-코드들이 분리되니 가독성이 좋아짐
-변화에 민감하지않음
-테스트가 용이하고 다양한 패턴을 적용하는데 유연함
3.적용 유형 세가지.
- 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입.
- 세터(Setter)를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입.
- 필드를 통한 주입.
*Spring3.x버전까지만 해도 새터주입을 권장하였으나 최근, 순환참조, Coupling등의 문제로 인하여 Spring4.3 이후 버전 부터는 Contructor Injection을 권장.
1. 필드 주입(Field Injection)방식.
필드주입 방식은 가장간단한 방법으로, Bean으로 등록된 객체를 사용하고자 하는 클래스에 Field로 선언한뒤
@Autowired어노테이션 키워드를 붙여주면 자동으로 주입된다.
@Autowired는 등록된 Bean의 타입과 변수의 타입을 매칭에서 객체에 주입시켜줌. 선언위치는 인스턴스 변수, 생성자, 매소드 위.
-> 이 방식은 권장되지않는다. 매우 추상적인 기법이기때문. 쉽게 주입되는만큼 의존 관계가 복잡해질 우려가 있다. <-
-> 너무나 쉬운 의존성 주입은 하나의 클래스가 지나치게 많은 기능을 하게됨. 이는 결국 초기 설계의 목적인 "객체는 그 에 맞는 동작만 한다" 라는 원칙에 위배된다. <-
->추상적이므로 그 의존성관계를 검증하기 힘들다.<-
-> 해당 클래스를 곧바로 인스턴스화 시킬수 없음. 컨테이너 밖의 환경에서는 해당 클래스의 객체를 참조할때, Dependency를 정의해 두는 Reflection을 사용하는 방법외에는 참조할 방법이 없다.<-
2. 새터 주입(Setter Injection)방식
setter메소드에 @Autowired를 붙여서 객체를 주입하는방식. 현재는 권장되지 x
3.생성자 주입(Constructor Injection)방식
Constructor Injection방식은 Spring4.3버전 이상부터 권장됨.
기존 Field Injection방식의 단점을 극복해낸 패턴.
참고한 블로그.
[출처]https://blog.naver.com/dktmrorl/222116844258
[출처]https://engkimbs.tistory.com/602?category=767795 (loc, 역전)
'개발공부 > Spring' 카테고리의 다른 글
[스프링] Mybatis Mapper 관련 링크 공유 (0) | 2021.02.26 |
---|---|
[스프링] 어노테이션 @RequestMapping @ReqeustBody @ResponseBody (0) | 2021.02.22 |
Mybatis(2) (1) | 2021.01.02 |
Mybatis (1) (0) | 2021.01.01 |
Mybatis 동적 쿼리(1) (0) | 2020.12.31 |
댓글