Notice
Recent Posts
Link
Today
Total
04-12 07:55
๊ด€๋ฆฌ ๋ฉ”๋‰ด

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