Study/Spring Framework

[Spring] Spring Bean 개념

jonghne 2023. 10. 1. 22:26

개요

이번 게시글에서는 Spring Bean 개념과 등록 방법에 대해 간단하게 정리합니다.

 

Spring Bean이란 ?

Spring Bean이란 Spring Container에서 관리하는 객체로 어플리케이션이 기동되는 시점에 Spring Container에 등록되어, 생성 및 관리되며 애플리케이션 종료 시 제거된다.

 

Spring Bean은 컨테이너에 클래스 별로 인스턴스 1개씩만 존재하고, 클라이언트 요청이 올 때 마다 컨테이너에서 꺼내서 사용하게 된다. (싱글톤 패턴)

 

Spring Bean 의 사용 이점

만약 클라이언트 코드에서 의존관계를 주입할 때 new() 로 직접 객체를 생성하게 되면,  의존 받은 객체의 코드가 변경되는 경우 클라이언트 코드에도 영향을 미치게 된다.  (역할과 구현이 분리되지 않아서 유연한 애플리케이션 개발이 어렵다)

 

그러나 이 Spring Bean을 사용하면 클라이언트 코드에서 의존관계를 컨테이너를 통해 주입(DI) 받게 되므로,  클라이언트 코드는 인터페이스만 알면 되고 구현체는 몰라도 된다. 

 

즉, 구현체가 변경되어도 Spring Bean 등록 부분만 수정되면 그 외에 어떤 코드도 변경되지 않는다.

 

Spring Bean  등록 방법 

Spring Bean을 Spring Container에 등록하는 방법은 아래 두가지 방법이 있다.

 

자바 어노테이션을 통해 Bean 등록

Spring Bean으로 등록하려는 클래스에 @Component 어노테이션을 붙이고, Spring Container가 기동 시점에 해당 어노테이션이 붙은 클래스를 찾아서 Bean으로 등록하는 방법이다. 

 

Spring Container가 탐색하는 범위는 main 메소드가 포함되어 있는 패키지 기준으로만 탐색한다. 

 

참고로 주로 사용하는 @Controller / @Service / @Repository 어노테이션도 내부에는 @Component가 붙여져 있기 때문에 해당 어노테이션이 붙어있으면 Spring Bean으로 등록된다.  

 

 

자바 코드로 직접 Bean 등록

기존 클래스를 Bean으로 바로 등록하지 않고, Spring Bean 관리 용도의 클래스 파일을 만들어서 특정 클래스를 Spring Bean을 등록하는 방법이다.

 

아래와 같이 생성한 클래스 파일에 @Configuration 어노테이션을 붙이고, @Bean 어노테이션을 붙인 생성자 메소드를 만들어서 Spring Bean으로 등록시킨다.

 

참고로 Bean을 등록할 때 return 부분에 정의한 구현 클래스가 Bean으로 등록된다. 

@Configuration
public class SpringConfig {
    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl();
    }
    @Bean
    public MemberRepository memberRepository() {
      return new MemoryMemberRepository();
    }
}

 

 

출처 : https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard