몽상실현개발주의

Spring Boot에서 의존성 주입: @Bean과 @Autowired의 이해 본문

Dev

Spring Boot에서 의존성 주입: @Bean과 @Autowired의 이해

migrationArc 2024. 5. 6. 16:13

Spring Boot는 Java 개발자들에게 강력한 프레임워크를 제공하여, 비즈니스 애플리케이션을 빠르고 효율적으로 개발할 수 있게 돕습니다. 특히, 의존성 주입(Dependency Injection, DI)은 Spring Boot의 핵심 기능 중 하나로, 애플리케이션의 결합도를 낮추고, 코드의 재사용성을 높이며, 테스팅을 용이하게 합니다. 이 글에서는 Spring Boot에서 사용되는 두 가지 주요 의존성 주입 방식인 @Bean과 @Autowired에 대해 자세히 알아보겠습니다.

 

# @Bean@Configuration 의 사용

@Bean 어노테이션은 메소드에 사용되어, 해당 메소드가 Bean 객체를 생성하고 반환하는 것을 나타냅니다.

이 메소드들은 주로 @Configuration 이 붙은 클래스 내에 위치하며, 이 클래스들은 Spring 컨테이너가 구동될 때 빈으로 등록되는 설정 파일의 역할을 합니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
    @Bean
    public MessageService messageService() {
        return new MessageService();
    }

    @Bean
    public UserService userService(MessageService messageService) {
        return new UserService(messageService);
        // 의존성 주입
    }
}

위의 코드에서, AppConfig는 설정 클래스로서, MessageService와 UserService 객체를 Bean으로 생성하고 의존성을 주입합니다. 이 방식은 개발자가 의존성의 생성과 주입을 명확히 제어할 수 있게 해줍니다.

 

 

 

# @Component@Autowired 의 역할

@Component 는 클래스 레벨에서 사용되어, 해당 클래스를 자동으로 스캔하여 Spring 컨테이너에 Bean으로 등록하도록 합니다. @Autowired 는 이러한 Bean들 사이의 의존성을 자동으로 주입하는 데 사용됩니다. 필드, 생성자, 또는 세터 메소드에 이 어노테이션을 사용할 수 있습니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private MessageService messageService;
    // 의존성 주입

    public String getUserMessage() {
        return messageService.getMessage();
    }
}

이 경우, UserService는 @Service 어노테이션을 통해 자동으로 Bean으로 등록되고, MessageService는 @Autowired 를 통해 해당 서비스에 자동으로 주입됩니다. 이 방법은 코드를 간결하게 유지하고, 개발자가 직접적으로 의존성을 관리하지 않아도 되는 이점을 제공합니다.

 

 

결론

@Bean 과 @Configuration 을 사용하는 방식은 개발자가 의존성을 더욱 세밀하게 관리할 수 있게 해주는 반면, @Component와 @Autowired 는 더 간결하고 자동화된 방식으로 의존성 주입을 처리합니다. 프로젝트의 요구 사항과 팀의 선호에 따라 적절한 방법을 선택할 수 있습니다.

Comments