DI (Dependency Injection, 의존성 주입)
구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정 의됨 |
즉, 외부에서 객체를 주입 받아 사용함 |
이를 통해 코드 간의 재사용률을 높이고, 모듈 간의 결합도를 낮출 수 있음 |
의존성이란?
특정 클래스가 존재해야지, 다른 클래스에서 작업을 수행할 수 있다면 의존성이 있다고 한다. |
프로젝트 기획이 변경되었다면 양쪽 클래스 모두를 수정해야 하는 경우가 발생할 수 있다. |
의존성 주입(DI, Dependency Injection
1. 생성자를 이용한 의존성 주입
public class BoardService
{
private final IBoardPersistence persistence; // 인터페이스
// 생성자를 이용해 객체 주입
public BoardService(IBoardPersistence persistence)
{
this.persistence = persistence;
}
}
public class user
{
public static void main(String[] args) {
IBoardPersistence persistence = new DbBoardPersistence();
|
}
객체를 외부에서 생성자를 통해 주입해서 사용하기 때문에 주입 당하는 클래스의 코드를 수정할 필요는 없음 |
2. setter를 이용한 의존성 주입
public class BoardService
{
private IBoardPersistence persistence; // 인터페이스
// setter 를 이용한 의존성 주입
public void setIBoardPersistence(IBoardPersistence persistence) {
this.persistence = persistence;
}…
}
public class user
{
public static void main(String[] args) {
IBoardPersistence persistence = new DbBoardPersistence();
BoardService service = new BoardService();
service.setBoardPersistence(persistence);
}
생성자 기반 주입과 기본적인 기능은 동일함, 단, class 객체의 생성 시점이 아닌 set를 통해 이후에 기능에 필요한 정보를 넘겨줌 |
3. 필드 주입
@Autowired
private FieldService fieldService;
스프링 프레임워크
• 프로젝트 규모가 커질수록 의존성 주입을 수동으로 관리하기 어려워짐 | |
• 이 문제를 해결하고자 의존성 주입을 담당하는 컨테이너 필요해짐! | |
스프링 IoC 컨테이너 | 스프링 프레임워크에서 의존성 주입을 담당하는 핵심 컴포넌트 |
객체 생성시 주입해야 하는 객체를 자동으로 주입해줌 (단, Bean 으로 등록된 객체여야 함!) | |
Bean | 스프링 컨테이너가 관리하는 객체로 애플리케이션의 핵심을 이룸 |
스프링의 제어를 받음 | |
스프링 컨테이너 (Bean Factory) | Bean의 생명주기를 관리하고 의존성을 주입하는 역할 |
Bean이란?
Spring IoC 컨테이너가 관리하는 Java 객체 |
Spring 에서는 new 를 이용해 만들어진 객체가 아니라 Spring에서 관리하는 Bean 이라는 객체를 이용함 |
Bean의 장점
의존성 관리가 용이 | Spring 이 객체의 생명주기와 의존관계를 관리하므로개발자는 비즈니스 로 직에 집중 |
싱글톤(Singleton) 패턴의 이점 | 동일한 타입의 객체가 여러 번 생성되는 것이 아니라, 하나의 인 스턴스를 생성하여 재사용 ->메모리 사용을 절약, 애플리케이션 성능 향상 |
AOP지원 | Bean 으로 등록된 객체들을 Spring AOP를 통해 부가 기능을 손쉽게 추가 가능 |
Bean 등록 방법
@Component
• 가장 간단한 방법으로 클래스 선언부 위에 @Component 을 사용 |
• 스프링에게 “해당 클래스를 빈(Bean)으로 등록해줘” 라고 알려주는 역할을 함 |
자바 설정 클래스를 직접 만들기
• 설정 클래스를 만들고 @Configuration 이용 |
• 해당 클래스 안의 메소드에 @Bean 사용해 개별 Bean 을 정의 |
• JWT나 Session, Swagger 등을 사용할 때 프로젝트 내 코드와 별개로 작성된, 오로지 해당 기능을 적용하기 위해 설정해야 할 코드를 Bean을 통해 주입해서 설정하는 것 |
• Bean 으로 등록된 객체를 의존성 주입받아 사용하려면? @Autowired 사용 |
'국비지원 공부 정리 > SpringBoot' 카테고리의 다른 글
스프링에서 데이터베이스에 접근하는 방법 (0) | 2025.04.12 |
---|---|
Spring Boot의 기초 어노테이션 (1) | 2025.04.11 |
Spring Boot를 이용해 데이터 주고받기 (0) | 2025.04.10 |
JAVA에 존재하는 객체 - DTO, VO, (0) | 2025.04.10 |
REST API (0) | 2025.04.10 |