JAVA/Spring

AppConfig: 어셈블러이자 오브젝트 팩토리로 불리는 이유

min민 2024. 12. 16.

AppConfig: 어셈블러이자 오브젝트 팩토리로 불리는 이유

Spring Framework를 다루다 보면 AppConfig가 어셈블러(Assembler) 또는 오브젝트 팩토리(Object Factory)로 불리는 경우가 많다. 이는 AppConfig가 빈(bean)의 생성과 의존관계(Dependency)를 동적으로 관리하는 역할을 하기 때문이다.

 

 

 

1. AppConfig는 어셈블러이다

소프트웨어에서 "어셈블러"는 여러 컴포넌트를 조합하여 하나의 시스템을 구성하는 역할을 의미한다. Spring에서 AppConfig는 애플리케이션의 다양한 의존관계를 조립하는 역할을 한다. 즉, 하나의 빈이 다른 빈에 의존할 때 그 관계를 설정하고 애플리케이션 전반의 흐름을 완성하는 중요한 조립기(Assembler) 역할을 수행한다.

 

예를 들어:

 

@Configuration
public class AppConfig {

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

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

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

 

위 예시에서 orderService()memberRepository()discountPolicy()를 의존한다. AppConfig는 이러한 의존관계를 조립(assemble)하여 빈을 생성한다. 클래스 간의 결합도를 낮추고 유연한 구조를 만들어내는 핵심 역할을 담당하기 때문에 어셈블러로 불린다.


2. AppConfig는 오브젝트 팩토리이다

AppConfig는 일종의 오브젝트 팩토리로도 볼 수 있다. 팩토리 패턴(Factory Pattern)의 핵심은 객체의 생성 로직을 감추고 원하는 객체를 제공하는 것이다. AppConfig는 스프링 컨테이너가 관리하는 모든 빈의 팩토리 역할을 하며, 각 메서드는 객체(빈)를 생성하고 반환하는 기능을 수행한다.

 

 

예를 들어:

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

 

위 코드에서 memberService()MemberServiceImpl 객체를 생성하고 반환한다. 여기서 AppConfig객체 생성의 책임을 맡은 팩토리 역할을 한다. 또한 의존성 주입(DI, Dependency Injection)을 통해 객체 간의 관계를 설정하면서 동적인 제어를 가능하게 한다.

 

 

3. AppConfig와 DI 컨테이너의 역할

AppConfig가 어셈블러이자 오브젝트 팩토리로 불리는 이유는 스프링의 DI(Dependency Injection) 컨테이너가 AppConfig를 기반으로 빈을 관리하고 생성하기 때문이다.

  • 의존관계 주입: AppConfig를 통해 스프링 컨테이너는 의존관계를 명확하게 설정한다.
  • 동적 제어: 어떤 구현체를 사용할지 결정하는 부분이 AppConfig에 있으므로 런타임에 유연하게 변경이 가능하다.
  • 객체 재사용: 스프링 컨테이너는 빈을 싱글톤으로 관리하며, 효율적인 객체 재사용을 돕는다.

결국 AppConfig는 단순히 객체를 생성하는 것이 아니라 빈의 생명주기와 의존관계를 컨테이너 수준에서 제어하며, 애플리케이션의 구조를 깔끔하게 유지하는 역할을 한다.

 

 

총 정리

AppConfig가 어셈블러와 오브젝트 팩토리로 불리는 이유는 의존관계를 조립하고 빈을 동적으로 생성 및 관리하는 스프링의 핵심 구성 요소이기 때문이다. 객체 생성의 책임을 분리하고, 유연하고 확장성 있는 애플리케이션 구조를 만드는 데 기여하기 때문에 AppConfig는 스프링의 DI 컨테이너에서 매우 중요한 역할을 한다.

 

댓글