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

seon님의 프로필 이미지

작성한 질문수

자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌

스프링 설정 파일 분리

싱글톤이 뭔가요..

21.07.08 10:46 작성

·

700

0

싱글톤이 뭔가요..

답변 2

5

허영운님의 프로필 이미지

2021. 07. 13. 08:08

1. 싱글톤 패턴(Singleton pattern) 

싱글톤 패턴(Singleton pattern) 이란 생성자가 여러 차례 호출되더라도 실제로 객체를 단 하나만 생성하는 방법입니다. 즉, 처음 객체를 생성한 이후에 호출될 경우 이미 생성한 객체를 반환하여 하나의 인스턴스만을 사용하게 만드는 것을 말합니다.

2. 싱글톤 패턴 구현

2-1) 싱글톤 패턴을 사용하지 않았을 경우

@Test
void pureContatiner() {
    AppConfig appConfig = new AppConfig();

    //1. 호출할 때마다 다른 객체를 생성
    MemberService memberService1 = appConfig.memberService();
    
    //2. 호출할 때마다 다른 객체를 생성
    MemberService memberService2 = appConfig.memberService();
    Assertions.assertThat(memberService1).isNotSameAs(memberService2);
}

기본적으로 'Member member = new Member()'처럼 new 연산자를 이용해 객체를 생성하면 계속해서 객체를 만들어냅니다. 만약 많은 객체를 생성해야 하는 서비스(ex. 배민)를 만들 경우, 이방법을 사용한다면 메모리 낭비가 심해지게 됩니다.

2-2) 싱글톤 패턴을 사용할 경우

스프링 컨테이너를 예로 들면

@Test
void springContainer() {
    AnnotationConfigApplicationContext appConfig = new AnnotationConfigApplicationContext (AppConfig.class);
    MemberService memberService1 = appConfig.getBean(MemberService .class);
    MemberService memberService2 = appConfig.getBean(MemberService .class);

    System.out.println("memberService1 = " + memberService1);
    System.out.println("memberService2 = " + memberService2);

    Assertions.assertThat(memberService1).isSameAs(memberService2);
}

스프링 컨테이너로 Bean 객체를 호출할 경우 동일한 객체를 불러오는 것을 알 수 있습니다. (참조값 동일)

허영운님의 프로필 이미지

2021. 07. 13. 08:11

참고: https://velog.io/@jaeeunxo1/spring-singleton

0

alscjf0505님의 프로필 이미지

2021. 07. 12. 22:24

객체 생성을 할 경우 원래라면 주소값이 다른데

싱글턴 패턴으로 객체를 생성하면 주소값이 모두 같습니다

seon님의 프로필 이미지

작성한 질문수

질문하기