프로그램 구조를 변경하는 디자인 패턴 중 하나
객체 간의 의존성을 줄이고 결합도를 느슨하게 만들기 위해 사용
IoC (Inversion of Control)
개발자가 아닌 프레임워크가 객체의 생성과 관리를 수행하기 때문에 개발자는 객체를 사용하기 위해 필요한 인터페이스를 정의하는 것에 집중할 수 있다. 소프트웨어의 유연성과 확장성을 향상시키는 중요한 개념으로, 객체지향에서 필수적인 디자인 패턴 중 하나이다.
DI (Dependency Injection)
객체 간의 의존성을 관리하는 방식으로, 객체를 직접 생성하지 않고 외부에서 생성한 후 객체에 주입하는 방식입니다. 따라서 객체 간의 결합도를 낮추고 유연한 프로그램 구조를 만들 수 있습니다.
IoC : 객체를 생성하고 객체 간의 의존성을 해결하기 위해 인터페이스를 이용한 DI 수행
Spring 프레임워크 : IoC 컨테이너를 통해 객체의 생성과 관리
개발자는 스프링 컨테이너에 필요한 객체들을 등록하고, 필요한 객체를 요청하여 사용할 수 있다.
스프링 컨테이너는 객체의 생성, 의존성 주입, 초기화, 소멸 등의 관리를 수행한다.
Spring core 모듈
스프링 프레임워크의 기본적인 기능을 담당하는 모듈 중 하나
IoC 컨테이너와 DI 컨테이너를 제공하여 객체지향적 설계 촉진
애플리케이션의 유연성과 확장성을 향상시키는데에 중점
@Component: 스프링의 컴포넌트 스캔 기능을 사용하여 빈으로 등록하고자 하는 클래스 사용
@Autowired: 자동 주입을 위한 아노테이션. 스프링 컨테이너가 해당 타입에 맞는 빈을 자동으로 주입
@Qualifier: 여러 개의 빈이 등록되어 있을 때, 어떤 빈을 주입할 지 선택하기 위한 아노테이션
@Controller: 스프링 MVC에서 컨트롤러 역할을 하는 클래스에 사용
@Service: 비즈니스 로직을 처리하는 서비스 클래스에 사용
@Repository: 데이터베이스와 관련된 작업을 처리하는 DAO 클래스에 사용
@Configuration: 자바 기반의 스프링 설정 클래스에 사용
@Bean: @Configuration 클래스에서 스프링 빈을 직접 등록하기 위한 아노테이션
@Scope: 빈의 범위를 지정하기 위한 아노테이션으로, singleton, prototype, request, session, global session 등이 있다
@Value: 프로퍼티 값을 주입하기 위한 아노테이션으로, 스프링의 PropertyPlaceholderConfigurer를 통해 값을 가져올 수 있다