GiantStepDEV
article thumbnail

์‹ฑ๊ธ€ํ†ค

  • ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ๋งŒ๋“ค๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

์‚ฌ์šฉ๋ชฉ์ 

  • ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๊ณต์œ ์˜ ์ด์ ์ด ์žˆ์Œ

๋‹จ์ 

  • ๊ตฌํ˜„์ด ๊นŒ๋‹ค๋กœ์›€
    ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Œ(๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉ์‹œ syncronized(๋™๊ธฐํ™”) ํ•„์š”)

syncronize

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋•Œ์— ๋“ค์–ด๊ฐˆ ๋•Œ ์ž ๊ธˆ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ..(?)
    ๋‚จ๋ฐœํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ˜„์ €ํžˆ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ ์€ ๋ฒ”์œ„์—์„œ ๊ผญ  ํ•„์š”ํ•  ๋•Œ๋งŒ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์Œ.

โ— ์‹ฑ๊ธ€ํ†ค ์„ ์–ธ (ํŒจํ‚ค์ง€ ๋™์ผ)

public class Singleton {
    String name;
    int id;
    private static Singleton singleton = new Singleton();
    
    private Singleton() {
        name = "test";
        id = 20;
    }
    
    static Singleton getSingleton() {
        return singleton;
    }
}
private static Singleton singleton = new Singleton();
์ฐธ์กฐ๋ณ€์ˆ˜(singleton)๊ฐ€ ํ•˜๋‚˜๋งŒ(static) ๋งŒ๋“ค์–ด์ง„๋‹ค.
์™ธ๋ถ€์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— private static์œผ๋กœ ...
static Singleton getSingleton() {
    return singleton;
}
getSingleton() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ (singleton ์ฃผ์†Œ๊ฐ’)
๋ฐ˜ํ™˜ํƒ€์ž…:Singleton

โ— Singleton ๊ฐ์ฒด๋ฅผ ๋‘ ๊ฐœ ์ƒ์„ฑ ํ›„ ๊ฐ™์€ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋Š” ์˜ˆ์ œ

public class ReferenceTest1 {
    Singleton singleton = Singleton.getSingleton();
    
    void setInfo(String name, int id) {
        singleton.name = name;
        singleton.id = id;
    }
    
    void viewInfo() {
        System.out.println("์ด๋ฆ„ : " + Signleton.name);
        System.out.println("id : " + Singleton.id);
    }
}

public class ReferenceTest2 {
    Singleton singleton = Singleton.getSingleton();
    
    void setInfo(String name, int id) {
        singleton.name = name;
        singleton.id = id;
    }
    
    void viewInfo() {
        System.out.println("์ด๋ฆ„ : " + Singleton.name);
        System.out.println("id : " + Singleton.id);
    }    
}
public class Singleton {
    public static void main(String[] args) {
        ReferenceTest1 ref1 = new ReferenceTest1();
        ReferenceTest2 ref2 = new ReferenceTest2();
        ref1.setInfo("ํ™๊ธธ๋™", 200);
        ref2.viewInfo();

์ฐธ์กฐํ•˜๋Š” ๊ฐ’์ด ๋™์ผํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ˜„์žฌ ๊ฐ™์€ ์Šค๋ ˆ๋“œ๋ผ ๊ฐ’์ด ์•ˆ๊นจ์ง€์ง€๋งŒ,
๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฉด ๊ฐ’ ๊นจ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— syncronized ํ•ด์ค˜์•ผ ํ•จ!!

 

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!