인프런 커뮤니티 질문&답변

박진우님의 프로필 이미지
박진우

작성한 질문수

스프링 핵심 원리 - 기본편

다양한 의존관계 주입 방법

결론적으로 DI를 관리하는 것은 AppConfig에서 하나요?

작성

·

278

·

수정됨

0

@Component 애노테이션을 사용하여 스프링 빈에 자동으로 클래스를 등록하고, 각 스프링 빈 간의 의존관계를 주입하는 방법에 대해 이해했습니다.

의존관계 주입의 목적이, SOLID원칙에서 특히 DIP원칙을 위반하지 않기 위함이라고 생각됩니다. 추상화에 의존하고, 클라이언트 코드의 변경을 줄이기 위함입니다.

그렇다면 실제 런타임에서 인스턴스(구현체)간의 의존 관계를 주입해주는 로직은 AppConfig에서 진행되는 건가요?

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

    @Bean
    public OrderService orderService() {

        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public DiscountPolicy discountPolicy() {
        return new FixDiscountPolicy();
    }

}

위 코드는 기존에 사용하던 AppConfig클래스입니다. 여기서는 @Bean을 사용하여 수동으로 빈 등록을 해주므로 충돌이 존재할 것이라 무언가 수정이 필요하다고 생각되고 @Bean만 제거한 코드를 사용하면 되나요?

생성자 주입을 통해 DI를 하는 것은 이해가 되었으나, AppConfig처럼 하나의 파일에서 런타임에 사용 될 의존관계를 정하는 코드가 궁금합니다

 

답변 1

1

안녕하세요. 박진우님, 공식 서포터즈 David입니다.

지금 작성하신 AppConfig를 통해 빈 의존관계가 설정됩니다.

충돌을 회피하기 위한 거라면 @Bean만 제거하셔도 됩니다.

AppConfig처럼 하나의 파일에서 런타임에 사용 될 의존관계를 정하는 코드가 궁금합니다 이 말씀이 정확히 어디의 어떤 코드가 궁금하신 건지 이해가 잘 안 됩니다🙂

감사합니다.

박진우님의 프로필 이미지
박진우

작성한 질문수

질문하기