JAVA 기반의 웹 프레임워크
Inversion of Control (IoC)와 Dependency Injection (DI)은 다형성을 활용하며 객체 지향 설계 원칙인 SOLID를 지키며 개발할 수 있도록 지원함
Spring의 객체 생성 및 실행 순서는 다음과 같다.
일반적으로 기존에는 2의 단계가 의존성 객체를 클래스 내부에서 생성하는 것이었는데, 각 단계에 대한 추가 설명과 효과를 다음 정의를 통해 설명하겠다.
스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식
DI 컨테이너 (ex. AppConfig)를 통해 생성자(constructor)가 IoC 컨테이너에 접근하는 것으로 의존 관계를 설정함
Spring은 외부에서 생성된 객체를 setter()를 통해 사용하는 두 번째 방법을 택한다.
이 때, 외부는 IoC 컨테이너라고 한다.
즉, A 객체에서 B, C 객체를 사용(의존)할 때 A 객체에서 직접 생성하는 것이 아니라 IoC 컨테이너에서 생선된 B, C 객체를 조립(주입)시켜 setter나 constructor를 통해 사용하는 방식이다.
DI를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
객체의 제어권이 스프링에게 넘어가는 것
메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
Spring에서의 객체
- Bean 컨테이너 : Bean이 생성되는 곳
Spring에서는 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해준다.
이를 통해 Bean들은 싱글턴 패턴의 특징을 가지며 제어의 흐름을 사용자가 컨트롤하는 것이 아니라 Spring에게 맡겨 작업을 처리할 수 있다.
컴파일 시 JVM이 보는 주석으로 메타 데이터 역할을 함
종류
@Component
@RestController
@Controller
@Configuration
@Service
@Bean
DI, IoC
@Autowired와 DI
https://devlog-wjdrbs96.tistory.com/166