밍구밍구밍 2024. 3. 28. 11:25

- 빈(bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 S/W 컴포넌트

>> 스프링 컨테이너 [관리 : 자바 객체(Object) ]

 

- 빈은 인스턴스화된 객체를 의미

- 빈은 @Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록

 

강의 듣던 중 이해 안되었던 내용 기록

 

Test 에서 스프링 @Bean 을 사용하여  memberServiceV3_3() 메서드가 MemberServiceV3_3 클래스의 생성자를 통해 memberRepositoryV3() 생성자를 주입 받아서 사용하는 코드이다.

 

class MemberServiceV3_3Test {

    public static final String MEMBER_A = "memberA";
    public static final String MEMBER_B = "memberB";
    public static final String MEMBER_EX = "ex";

    @Autowired
    private MemberRepositoryV3 memberRepository;
    @Autowired
    private MemberServiceV3_3 memberService;

    @TestConfiguration
    static class TestConfig {
        @Bean
        DataSource dataSource() {
            return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
        }

        @Bean
        PlatformTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }

        @Bean
        MemberRepositoryV3 memberRepositoryV3() {
            return new MemberRepositoryV3(dataSource());
        }

        @Bean
        MemberServiceV3_3 memberServiceV3_3() {
            return new MemberServiceV3_3(memberRepositoryV3());
        }
    }

위의 코드의 @Bean 메서드 memberServiceV3_3() 는 MemberServiceV3_3 스프링 빈을 생성하고, 이 빈의 생성자에 memberRepositoryV3() 메서드를 통해 생성된 MemberRepositoryV3 빈을 주입한다. 이로 인해 MemberServiceV3_3 클래스의 인스턴스는 MemberRepositoryV3 객체의 기능을 사용 할 수 있게 되는 것이다.

 

@Bean
MemberServiceV3_3 memberServiceV3_3() {
    return new MemberServiceV3_3(memberRepositoryV3());
}

 이 메서드는 MemberServiceV3_3 타입의 빈을 생성하고 반환한다

매서드 내부에서 memberRepositoryV3() 메서드를 호출하여 MemberRepositoryV3 타입의 빈을 가져온다

memberRepositoryV3() 메서드는 MemberRepositoryV3 타입의 빈을 생성하고 반환한다.

 

[MemberServiceV3_3 생성자]

public MemberServiceV3_3(MemberRepositoryV3 memberRepository) {
    this.memberRepository = memberRepository;
}

위와 같이 MemberServiceV3_3 생성자는 MemberRepository 타입의 객체를 받아  this.memberRepository 필드를 초기화 한다. 이로인해 MemberServiceV3_3 클래스의 인스턴스는 MemberRepositoryV3 객체의 기능을 사용할 수 있게 되는 것이다.

 

※ 정리 :

memberServiceV3_3() 메서드가 반환하는 MemberServiceV3_3 객체는 MemberRepositoryV3 빈은 생성자 주입을 통해 받아 사용한다.

따라서, MemberServiceV3_3 클래스 내의 메서드에서 this.memberRepository 를 통해 MemberRepositoryV3 의 기능을 호출 할 수 있게 되는데 이렇게 스프링의 의존성 주입(Dependency Injection)을 통해, MemberServiceV3_3 은 필요한 의존성 (MemberRepositoryV3) 을 쉽게 사용할 수 있게 되며, 이는 스프링의 제어의 역전(IoC) 및 의존성 주입의 핵심 개념이다.