Notice
Recent Posts
Link
Today
Total
10-06 00:17
관리 메뉴

dingdong coding

Singleton Pattern λ³Έλ¬Έ

🐰JAVA/Design Pattern

Singleton Pattern

🐢 개발개발 🐾 2022. 6. 21. 21:46

ν•„μš”μ„± 

λ¨Όμ € Singleton νŒ¨ν„΄μ„ μ™œ μ‚¬μš©ν•΄μ•Όν•˜λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.

 

μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•œ λͺ…μ˜ μœ μ €κ°€ μ•„λ‹Œ μ—¬λŸ¬ μœ μ €κ°€ μ΄μš©ν•˜λ©° 같은 μ„œλΉ„μŠ€λ₯Ό λ™μ‹œ λ‹€λ°œμ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

싱글톀 νŒ¨ν„΄μ„ μ μš©ν•˜μ§€ μ•Šμ€ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌλ©΄ μš”μ²­μ„ 받을 λ•Œ λ§ˆλ‹€ μš”μ²­ 받은 μ„œλΉ„μŠ€μ— λŒ€ν•œ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜κ³  μ†Œλ©Έμ‹œν‚€λŠ” 과정을 무수히 λ°˜λ³΅ν•  κ²ƒμž…λ‹ˆλ‹€.

 

이 κ³Όμ •μ—μ„œ μ‹¬ν•œ λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ λ°œμƒν•˜κ²Œ 되며 이와 같은 λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μš°λ¦¬λŠ” 싱글톀 νŒ¨ν„΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

Singleton Pattern

    •  객체(μΈμŠ€ν„΄μŠ€)κ°€ 였직 1개만 μ‘΄μž¬ν•΄μ•Όν•˜λŠ” 경우 μ‚¬μš©ν•©λ‹ˆλ‹€.   

    •  κ°μ²΄κ°€ ν˜„μž¬ JVMμ•ˆμ— ν•˜λ‚˜λ§Œ μžˆμ–΄μ•Όν•˜λŠ” νŒ¨ν„΄ 

    •  private μƒμ„±μž μ™ΈλΆ€μ—μ„œ new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 객체λ₯Ό 2개 이상 μƒμ„±ν•˜μ§€ λͺ»ν•˜λ„둝 λ§‰μŠ΅λ‹ˆλ‹€.

    •  μΈμŠ€ν„΄μŠ€κ°€ 였직 ν•˜λ‚˜λ§Œ μƒμ„±λ˜λŠ” 것을 보μž₯ν•˜κ³  μ–΄λ””μ—μ„œλ“  이 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄ 

 

Singleton Pattern μ»¬λ ˆλ³΄λ ˆμ΄μ…˜

- 정인상, 채홍석 JAVA 객체 지ν–₯ λ””μžμΈ νŒ¨ν„΄, ν•œλΉ›λ―Έλ””μ–΄ p201

 Singleton 

:  '단 ν•˜λ‚˜μ˜ μ›μ†Œλ§Œμ„ 가진 집'μ΄λΌλŠ” μˆ˜ν•™ μ΄λ‘ μ—μ„œ 유래

:  ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œμ„ μƒμ„±ν•˜λŠ” μ±…μž„μ΄ 있으며 getInstance λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ™μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ 및 μ‘°νšŒν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ 

 

  getInstance λ©”μ„œλ“œ

항상 같은 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜

:  getInstance λ©”μ„œλ“œλ₯Ό 톡해 객체 생성을 μš”μ²­ν•˜λ©΄ 이미 객체가 μƒμ„±λœ κ²½μš°μ—λŠ” 개체λ₯Ό λ°˜ν™˜ν•˜κ³  처음 μƒμ„±ν•œ κ²½μš°μ—λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

public class Singleton {

	// static μ˜μ—­μ— 객체 μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜ 미리 μƒμ„±ν•΄μ„œ μ˜¬λ €λ‘”λ‹€.
    private static final Singleton instance = new Singleton();

	// ν•΄λ‹Ή κ°μ²΄λŠ” getInstance()λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ μ‘°νšŒκ°€λŠ₯함 
    // 항상 같은 μΈμŠ€ν„΄μŠ€ λ°˜ν™˜
    public static Singleton getInstance(){
        return instance;
    }
    
	// ν•˜λ‚˜μ˜ 객체 μΈμŠ€ν„΄μŠ€λ§Œ μ‘΄μž¬ν•΄μ•Όν•˜λ―€λ‘œ μƒμ„±μžλ₯Ό private으둜 μ„ μ–Έ 
    // μ™ΈλΆ€μ—μ„œ 객체 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜λŠ” 것 방지
    private Singleton(){

    }

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

}
@Test
@DisplayName("싱글톀 νŒ¨ν„΄ μ μš©ν•œ 객체")
void singletonServiceTest(){
    Singleton singleton1 = Singleton.getInstance();
    Singleton singleton2 = Singleton.getInstance();

    System.out.println("singleton1 = " + singleton1);
    System.out.println("singleton2 = " + singleton2);

    assertThat(singletonService1).isSameAs(singletonService2);

 }

 

ν…ŒμŠ€νŠΈ κ²°κ³Ό 같은 객체 μΈμŠ€ν„΄μŠ€κ°€ 호좜된 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

이처럼 싱글톀 νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€λ©΄ μš”μ²­μ΄ 올 λ•Œλ§ˆλ‹€ 객체λ₯Ό μƒˆλ‘œ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 이미 λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ³΅μœ ν•΄ 효율적으둜 μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

'🐰JAVA > Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Strategy Pattern  (0) 2022.07.06
Factory Method Pattern  (0) 2022.07.05
[ Object-Oriented Programming ] 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°  (0) 2022.01.24
Comments