빈 설정과 싱글톤

정의정·2023년 6월 19일
0

Spring

목록 보기
9/12
post-thumbnail

💡 빈 설정과 싱글톤

@Configuration 설정 클래스의 @Bean 설정과 싱글톤 객체에 대한 이야기를 다뤄보도록 하겠다. 스프링으로 빈 객체를 다루면서 생길 수 있는 궁금증을 해소해보자.

👀 궁금증

@Bean 애노테이션을 붙인 메서드에서 객체를 생성하면 빈 객체로 등록된다. 그렇다면 예를 들어 상황을 가정해보자. memberDao() 메서드를 실행하는 memberRegSvc(), changePwdSvc() 메서드가 있다. 그렇다면 이 두 메서드가 받아온 MemberDao 객체는 서로 다른 객체 아닐까?


🌟 싱글톤 객체

스프링 컨테이너가 생성한 빈은 싱글톤 객체다. 싱글톤이라는 것은 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 즉 다른 설정 메서드에서 MemberDao()를 몇 번 호출하든 반환하는 객체는 항상 같은 객체라는 것이다.


❔ 어떻게 가능할까?

스프링에서 우리가 작성한 설정 클래스를 그대로 사용하지 않기 때문이다.
스프링은 설정 클래스를 상속하는 새로운 설정 클래스를 만들어 사용한다. 한 번 생성한 객체를 보관했다가 이후부터는 동일한 객체를 반환하도록 한다.


🌟 프로토타입

싱글톤 범위가 아닌 프로토타입 범위의 빈을 설정하고 싶은 경우 어떻게 할 수 있을까? 속성 값으로 "prototype"을 가지는 @Scope 애노테이션을 사용하면 된다.

예시✔️

@Configuration
public class AppStxWithPrototype {

	@Bean
    @Scope("prototype")
    public Client client() {
    	Client client = new Client();
        client.setHost("host");
        return client;
    }
}

이렇게 되면 해당 빈은 프로토타입 범위를 가지는 빈이 되므로, 완전한 라이프사이클을 가지지 않는다. 따라서, 빈 객체의 소멸 처리를 코드에서 직접 해야할 필요가 있다.

라이프 사이클이란?✏️

스프링 컨테이너는 빈 객체의 라이프사이클을 관리한다.
객체 생성 > 의존 설정 > 초기화 > 소멸


🌟 결론

스프링 컨테이너가 생성한 빈은 별도의 설정을 하지 않으면 싱글톤 객체이므로, memberRegSvc(), changePwdSvc() 메서드에서의 MemberDao 객체는 항상 같다.

📖 교재 및 출처

  • 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 | 최범균님 저
profile
배움 기록

0개의 댓글