국비지원 공부 정리/SpringBoot

스프링부트의 의존성 주입 (@Bean, @Configuration, @Component, @Autowired

worldstroy 2025. 4. 11. 11:33

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 사용