πŸƒ 싱글톀 μ»¨ν…Œμ΄λ„ˆ

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 싱글톀

Untitled

import basic.springbasic.AppConfig;
import basic.springbasic.member.MemberService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.*;

public class SingletonTest {

    @Test
    @DisplayName("μŠ€ν”„λ§ μ—†λŠ” μˆœμˆ˜ν•œ DI μ»¨ν…Œμ΄λ„ˆ")
    void pureContainer() {
        AppConfig appConfig = new AppConfig();
        // 1. 쑰회: ν˜ΈμΆœν•  λ•Œ λ§ˆλ‹€ 객체λ₯Ό 생성
        MemberService memberService1 = appConfig.memberService();

        // 2. 쑰회: ν˜ΈμΆœν•  λ•Œ λ§ˆλ‹€ 객체λ₯Ό 생성
        MemberService memberService2 = appConfig.memberService();

        // 참쑰값이 λ‹€λ₯Έ 것을 확인
        System.out.println("memberService1 = " + memberService1);
        System.out.println("memberService2 = " + memberService2);

        // memberService1 != memberService2
        assertThat(memberService1).isNotSameAs(memberService2);
    }
}

싱글톀 νŒ¨ν„΄

public class SingletonService {

    // 1. static μ˜μ—­μ— 객체λ₯Ό λ”± 1개만 생성해둔닀.
    private static final SingletonService instance = new SingletonService();

    // 2. public으둜 μ—΄μ–΄μ„œ 객체 μΈμŠ€ν„°μŠ€κ°€ ν•„μš”ν•˜λ©΄ 이 static λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ μ‘°νšŒν•˜λ„λ‘ ν—ˆμš©ν•œλ‹€.
    public static SingletonService getInstance() {
        return instance;
    }

    // 3. μƒμ„±μžλ₯Ό private으둜 μ„ μ–Έν•΄μ„œ μ™ΈλΆ€μ—μ„œ new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ 객체 생성을 λͺ»ν•˜κ²Œ λ§‰λŠ”λ‹€.
    private SingletonService() {
    }

    public void logic() {
        System.out.println("싱글톀 객체 둜직 호좜");
    }

}
  1. static μ˜μ—­μ— 객체 instanceλ₯Ό 미리 ν•˜λ‚˜ μƒμ„±ν•΄μ„œ μ˜¬λ €λ‘”λ‹€.