μΉ μ ν리μΌμ΄μ μ λ³΄ν΅ μ¬λ¬ κ³ κ°μ΄ λμμ μμ²μ νλ€.
β μμ²μ΄ 100κ°λ©΄ κ°μ²΄κ° 100κ° μμ±λλ―λ‘ λΉν¨μ¨μ μ΄κ³ λ©λͺ¨λ¦¬ λλΉκ° μ¬νλ€!
test/singleton/SingletonTest.java
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);
}
}
μ°λ¦¬κ° λ§λ€μλ μ€νλ§ μλ μμν DI 컨ν
μ΄λμΈ AppConfig
λ μμ²μ ν λ λ§λ€ κ°μ²΄λ₯Ό μλ‘ μμ±νλ€.
κ³ κ° νΈλν½μ΄ μ΄λΉ 100μ΄ λμ€λ©΄ μ΄λΉ 100κ° κ°μ²΄κ° μμ±λκ³ μλ©Έλλ€!
ν΄κ²°λ°©μμ ν΄λΉ κ°μ²΄κ° λ± 1κ°λ§ μμ±λκ³ , 곡μ νλλ‘ μ€κ³νλ©΄ λλ€.
β μ±κΈν€ ν¨ν΄
ν΄λμ€μ μΈμ€ν΄μ€κ° λ± 1κ°λ§ μμ±λλ κ²μ 보μ₯νλ λμμΈ ν¨ν΄μ΄λ€.
private
μμ±μλ₯Ό μ¬μ©ν΄μ μΈλΆμμ μμλ‘ new
ν€μλλ₯Ό μ¬μ©νμ§ λͺ»νλλ‘ λ§μμΌ νλ€.μ±κΈν€ ν¨ν΄μ μ μ©ν μμ μ½λ : test/singleton/SingletonService.java
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("μ±κΈν€ κ°μ²΄ λ‘μ§ νΈμΆ");
}
}