@Bean과 @Component 차이?

eunsiver·2023년 4월 5일
0

Spring boot 구현

목록 보기
7/12

스프링부트를 사용하면서 @Component, @Bean을 마주하는 일은 굉장히 많다.

하지만 그 둘의 차이를 정확히 이해하지 못해 정리를 해보려고 한다.


스프링 개발의 제어권은 스프링 컨테이너 (IoC 컨테이너)에 있다고 한다. 이를 Ioc(Inversion of Control), 제어의 역전이라고 한다.

스프링이 개발자를 대신하여 객체를 제어하기 위해서는 객체들이 빈으로 등록되어 있어야 한다.

이는 annotation으로 간단하게 등록할 수 있다.

스프링 MVC에서는 @Controller, @Service, @Repository 등으로 빈으로 등록할 수 있으며,

Configuration 관련 객체들은 @Bean과 @Component로 스프링 컨테이너에 객체를 빈으로 등록할 수 있다.

그렇다면 @Bean과 @Component의 차이는 무엇일까???


@Bean

@Bean은 메소드 레벨에 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 어노테이션이다.
또한 개발자가 컨트롤이 불가능한 외부 라이브러리를 빈으로 등록하고 싶을때 사용한다.

예를 들어 Spring Security에서 제공하는 위 메소드의 경우 spring security 개발자에 의해 만들어진 라이브러리이다. 따라서 따로 수정하는 것은 힘들다.
또한 위의 메소드를 사용하기 위해서는 스프링에 Bean으로 등록을 해야하는데 이 때 사용하는 방법이 @Bean 어노테이션을 이용한 방법이다.

@Configuration을 선언한 클래스 내부에서 사용해준다.

@Target은 Method로 되어 있다.


@Component

@Component는 클래스 레벨에 선언함으로써 스프링이 런타임 시에 컴포넌트 스캔을 하여 자동으로 빈을 찾고 등록하는 어노테이션이다.
개발자가 직접 컨트롤이 가능한 클래스인 경우 @Component를 사용한다고 한다.

개발자가 컨트롤 할 수 있는 클래스는 개발자가 만든 클래스를 의미하며 컨트롤러 등에 사용하는 클래스를 의미한다.

@Configuration,@Controller,@Service,@Repository등의 어노테이션들은 @Component어노테이션을 포함하고 있다.

@Target은 Type으로 지정되어 있으며 Class에만 선언될 수 있다.

이후 해당 @Component를 호출할 때는 @Autowired라는 어노테이션을 사용해 @Component로 선언된 클래스의 기능을 자유롭게 사용할 수 있다.


profile
Let's study!

0개의 댓글