2 ๋ถ„ ์†Œ์š”

๐Ÿ“š JAVA


๐Ÿ“š Singleton Pattern

Singleton Pattern ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ (static) ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธํŒจํ„ด.
์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ•˜๋‚˜๊ณ  ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์— ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž๋Š” ์ตœ์ดˆ์— ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ( ์ž๋ฐ”์—์„œ๋Š” ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ ์–ธํ•˜์—ฌ ์ƒ์„ฑ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•˜๊ณ  getInstance()๋กœ ๋ฐ›์•„์“ฐ๊ธฐ๋„ ํ•œ๋‹ค. )
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.
-> ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š” ํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์ผ(๊ธฐ์กด) ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•จ.

  • ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž์— ์ ‘๊ทผ ๊ธˆ์ง€ -> ์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ private๋กœ ์„ค์ •
  • ๋‚ด๋ถ€์—์„œ๋Š” private์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ง์ ‘ ๊ฐ์ฒด ์ƒ์„ฑ -> ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ private ์„ค์ •
  • ์™ธ๋ถ€์—์„œ private member์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ getter ์ƒ์„ฑ -> setter๋Š” ๋ถˆํ•„์š”
  • ๊ฐ์ฒด ์—†์ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก getter์™€ ๋ณ€์ˆ˜์— static ์ถ”๊ฐ€
  • ์™ธ๋ถ€์—์„œ๋Š” ์–ธ์ œ๋‚˜ getter๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์žฌ์‚ฌ์šฉ

Singleton Pattern ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Singleton Pattern ์˜ ๋ฌธ์ œ์ 

  • ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ฑฐ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ์‹œํ‚ฌ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค ๊ฐ„์— ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ โ€œ ๊ฐœ๋ฐฉ - ํ์‡„ ์›์น™ โ€œ ์„ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋œ๋‹ค => ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์–ด๊ธ‹๋‚œ๋‹ค.
  • ์ˆ˜์ •์ด ์–ด๋ ค์›Œ์ง€๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‘๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Singleton Pattern ์‹ค์Šตํ•ด๋ณด์ฆˆ์•„!

class SingletonClass{
    // ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์–ป์œผ๋ฉด์„œ ํ•œ๋ฒˆ์˜ new๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉ
    private static SingletonClass instance = new SingletonClass();

    // default ์ƒ์„ฑ์ž
    private SingletonClass(){}

    // ๊ฐ์ฒด ์—†์ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค ( getter ์ƒ์„ฑ )
    public static SingletonClass getInstance(){
        return instance;
    }

    public void sayHello(){
        System.out.println("HELLO");
    }
}


public class SingletonTest {
    public static void main(String[] args) {

        // new๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค
        SingletonClass sc1 = SingletonClass.getInstance();
        SingletonClass sc2 = SingletonClass.getInstance();

        // ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค
        System.out.printf("๋‘ ๊ฐ์ฒด๋Š” ๊ฐ™๋‚˜ ?  %b%n", sc1 == sc2);
        sc1.sayHello();

    }
}

์‹คํ–‰๊ฒฐ๊ณผ

๋‘ ๊ฐ์ฒด๋Š” ๊ฐ™๋‚˜ ?  true
HELLO

Singleton Pattern ๋งˆ๋ฌด๋ฆฌ

๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ์ œํ•œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” Singleton Pattern์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค.
์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•˜๊ธฐ ์ „๊นŒ์ง„ ๋งˆ๋ƒฅ ์–ด๋ ต๊ฒŒ๋งŒ ๋ณด์˜€๋Š”๋ฐ ํ•œ ๋‹จ๊ณ„์”ฉ ๋ด๊ฐ€๋ฉฐ ๊ณต๋ถ€ํ•˜๋‹ˆ ๊ฐ„๋‹จํ–ˆ๋‹ค.
๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์–ป์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋‘๊ณ  private๋กœ ์ œํ•œํ•ด๋‘๋ฉด์„œ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ์—†์ด ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ getter๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•„์š”ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
Singleton ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐฉ์ง€์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์‰ฌ์šด ์žฅ์ , ๋‘๋ฒˆ์งธ ์ด์šฉ๋ถ€ํ„ฐ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง€๋Š” ์žฅ์  ๋“ฑ ์—ฌ๋Ÿฌ ์žฅ์ ๋“ค์ด ์žˆ๋‹ค.
์—ฌ๋Ÿฌ ๋””์ž์ธ ํŒจํ„ด๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ž˜ ๋ฐฐ์›Œ๋†“์œผ๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ๊ฒƒ ๊ฐ™๋‹ค.





๐Ÿ‘ ์ฐธ์กฐ
https://jeong-pro.tistory.com/86

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: