๊ด€๋ฆฌ ๋ฉ”๋‰ด

โœ๐Ÿป๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ

[ JAVA ] static ์‘์šฉ - singleton pattern ๋ณธ๋ฌธ

Language/Java

[ JAVA ] static ์‘์šฉ - singleton pattern

์ฉ์‹œํ‚ด 2020. 11. 1. 15:57
728x90

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด 

ํ”„๋กœ๊ทธ๋žจ ๋‚ด์— ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ new ์ƒ์„ฑ ์‹œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ

static์œผ๋กœ ์œ ์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ๊ตฌ์„ฑ 

https://en.wikipedia.org/wiki/Singleton_pattern#/media/File:Singleton_UML_class_diagram.svg

์œ„์˜ ๋„ํ‘œ์—์„œ - ๋Š” private ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ด

 

์‹ฑ๊ธ€ํ†ค ์ „์ฒด ๊ตฌ์„ฑ

public class Company {

    private static Company instance = new Company(); 
    
    private Company() {}
    
    public static Company getInstance() {
        if (instance == null) {
            return new Company();
        }
        return instance;
    }
}

 

1. private ์ƒ์„ฑ์ž

private Company() { }
  • ๋งŒ์•ฝ ํด๋ž˜์Šค ๋‚ด๋ถ€์—  ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  •  → ์ด๋Š” ์–ด๋””์„œ๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ → ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€ํ•œ private ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„
  • private ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์™ธ๋ถ€์—์„œ๋Š” ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

2. static ์ธ์Šคํ„ด์Šค

private static Company instance = new Company(); 

 

  • ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์œ ์ผํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค 

3. static ๋ฉ”์„œ๋“œ

public static Company getInstance() {
        if (instance == null) {
            return new Company();
        }
        return instance;
 }
  • ์œ ์ผํ•œ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์šฉ๋„๋กœ public ๋ฉ”์„œ๋“œ ์ƒ์„ฑํ•œ๋‹ค.
  • company ์ธ์Šคํ„ด์Šค๊ฐ€ static์ด ์–ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๊ณผ ์ƒ๊ด€์—†์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ตฌ์ฒด์ ์ธ ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ์˜์—ฌ๊ธฐ ์•„๋‹ˆ๊ณ  ํด๋ž˜์Šค ์ž์ฒด์— ์†ํ•œ๋‹ค.
  • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ ์„œ๋„ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ฑ๊ธ€ํ†ค ์‹คํ–‰๊ฒฐ๊ณผ

public class CompanyTest {

    public static void main(String[] args) {

       Company company1 = Company.getInstance();
       Company company2 = Company.getInstance();

       System.out.println(company1);
       System.out.println(company2);
    }
}

์‹คํ•ผํ•ด๋ณด๋ฉด company1 company2๊ฐ€ ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง์„ ํ™•์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ž๋ฐ” ๋‚ด๋ถ€ ํด๋ž˜์Šค ์ค‘ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ž‘์„ฑ๋œ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

Calendar calendar = Calendar.getInstance();

๋‚ ์งœ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋ถˆ๋ ค์ง€๊ณ  ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง€๋ฉด ์•ˆ ๋˜๋Š” ๊ฐ’์ด๋‹ค.

getInstance๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๋งŒ์•ฝ Calendar๊ฐ์ฒด๋ฅผ new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

Calendar ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ์ƒ์„ฑ๋œ ํด๋ž˜์Šค ( private  ์ƒ์„ฑ์ž๋กœ ๊ตฌ์„ฑ) ์ด๋ฏ€๋กœ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๋ถˆ๊ฐ€ํ•œ๋‹ค๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•