[Spring] 스프링의 특징
1. 경량 컨테이너
2. POJO(Plain Old Java Object)
- 일반적인 Java코드를 사용해 관계를 구성할 수 있다.
3. IoC(Inversion of Control)
- 스프링 프레임워크에서는 개발자들이 필요한 부분을 개발하여 '끼워넣기' 방식으로 완성한다.
- 완성된 코드는 개발자가 아닌 프레임워크의 내부에서 결정된 대로 최종 호출이 이루어지게 되는데 이 현상을 바로 "제어의 역행" 이라고 한다.
4. DI(Dependency Injection)
- IoC가 일어날 때 스프링이 Bean들 간의 의존 관계를 관리할 때 사용된다. (스프링이 Bean들 간의 연결 관계를 짓기 때문에 필요한 객체를 스프링이 알아서 주입해준다.)
- 스프링 프레임워크에서는 의존적인 객체를 직접 생성/제어하지 않는다.
MemberController 에 MemberService 가 주입되고, MemberService에 MemberRepository가 주입된다.
의존성 주입의 종류
- Constructor Injection(권장방법)
- 장점
- 테스트코드 작성시 생성자를 통해 의존성 주입이 용이하다.
- 의존성 주입 대상 필드를 final로 선언할 수 있다.(불변 객체)
@Controller
public class SearchController {
private final MovieService movieService;
public SearchController(MovieService movieService) {
this.movieService = movieService;
}
}
- Setter Injection
@Controller
public class SearchController {
private MovieService movieService;
public void setMovieService(MovieService movieService) {
this.movieService = movieService;
}
}
- 장점
- 의존성이 선택적으로 필요한 경우 사용된다.
- Constructor-Based와 함께 사용하면 선택적으로 필요한 의존성을 나눠서 주입할 수 있다. - 단점
- final 사용 불가
- Field Injection
- Spring 4.3부터는 생성자가 1개인 경우 @Autowired를 사용하지 않아도 된다.
@Controller
public class SearchController {
@Autowired
private MovieService movieService;
}
- 장점
- 간단하다. - 단점
- 의존 관계가 눈에 띄지않고 복잡해질 수 있다.
- final 사용 불가
"Field Inject is not recommend"
Intellij IDE에서 @Autowired를 사용하는 경우 "Field Inject is not recommend" 라는 경고를 볼 수 있다. Spring 팀에서도 Constructor Injection을 권고하고 있는데 그 이유는 다음과 같다.
1. 테스트코드 작성이 쉽다.
-
final 선언이 가능하기 때문에 불변성을 유지할 수 있다.
- 실행 중 객체가 변하는 것을 막을 수 있다.
- NullException과 같은 오류를 컴파일 시 방지할 수 있다.
-
한 클래스에 많은 의존성을 갖고 있는 경우 Constructor Injection 의 경우 생성자의 인자 수가 많아지므로 리팩토링을 통해 코드의 품질을 높힐 가능성이 높다.
-
순환 참조 오류가 발생하는 경우 컴파일 시 막을 수 있다.
5. AOP(Aspect-Oriented Programming)
6. MVC(Model View Controller)
7. Batch
8. Transaction Management Framework
Author And Source
이 문제에 관하여([Spring] 스프링의 특징), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeoj1n/Spring-스프링의-특징저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)