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

start1234님의 프로필 이미지
start1234

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 컨테이너

싱글톤 컨테이너 강의에서 궁금한점이 생겨서 질문드립니다.

작성

·

319

·

수정됨

0

앞선 강의에서 테스트를 진행하며 싱글톤 컨테이너를 생성할때
반환타입을 구체클래스인 AnnotationConfigApplicationContext로 하여 빈을 조회하거나 하였습니다.

AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

하지만 싱글톤 컨테이너 강의에서 요청이 두번왔을때 꺼낸 빈이 같은 객체를 반환하는지를 확인하기 위한 테스트에서(3분즘) 컨테이너를 생성할때 반환타입을 ApplicationContext로 하셨습니다. ApplicationContext는 인터페이스이기에 구현 클래스인 AnnotationConfigApplicationContext에 비해 기능도 적은 것으로 알고있는데, 혹시 지금까지의 테스트에선 반환타입을 AnnotationConfigApplicationContext로 하셨지만 아래 테스트에선 특별히 반환타입을 ApplicationContext로 하신 이유가 궁금하여 질문드립니다. 감사합니다.

@Test
    @DisplayName("스프링 컨테이너와 Singleton")
    void YesSpringContainer() {
        ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
        //AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

답변 2

0

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

강의에서 슬쩍 말씀하셨듯, 이름이 길다보니 코드 전체가 한 눈에 들어오는 ApplicationContext를 사용하신 것 같습니다.

이해하고 계신대로 ApplicationContext를 확장 구현한 것이 AnnotationConfigApplicationContext인데, 현재 강의에서 사용하는 기능은 ApplicationContext로도 충분합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.
싱글톤 컨테이너 강의에서 ApplicationContext를 사용한 이유에 대해 궁금하신 거군요.

싱글톤 컨테이너에서 빈을 가져올 때에는 구체 클래스인 AnnotationConfigApplicationContext를 사용하셨습니다. 이는 ApplicationContext 인터페이스의 구현 클래스 중 하나로, 스프링의 컨테이너 기능을 활용하기 위해 주로 사용됩니다.

그리고 “스프링 컨테이너와 Singleton” 테스트에서 ApplicationContext 인터페이스를 사용하신 이유는 구현 클래스에 의존하지 않고, 인터페이스에만 의존하여 스프링의 IoC 컨테이너의 핵심 기능인 싱글톤 객체를 테스트하기 위함입니다. 인터페이스를 사용하면 구체 클래스에 의한 제약 없이 다양한 구현 클래스를 사용할 수 있기 때문에, 더 유연하게 테스트할 수 있습니다.

즉, 실제로는 싱글톤 컨테이너를 생성할 때에는 계속해서 AnnotationConfigApplicationContext를 사용하시면 되지만, 테스트 코드에서는 ApplicationContext 인터페이스를 사용해야 다양한 구현 클래스를 활용할 수 있습니다.

테스트에서는 구체 클래스에 의존하지 않고 인터페이스를 사용하여 테스트 가능성과 유연성을 확보할 수 있기 때문에, 이러한 방식으로 작성하신 거라고 생각됩니다. 이해하셨나요? 추가로 궁금한 점이 있다면 언제든지 물어보세요. 감사합니다.

start1234님의 프로필 이미지
start1234

작성한 질문수

질문하기