C#

[C#] ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์ดํ•ดํ•˜๊ธฐ - C++, C# ๋น„๊ต

hyonie 2024. 5. 21. 13:05

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๊ณ , ์ „์—ญ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋‹จ์ผ ๊ฐ์ฒด๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „์— C++๋กœ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ๊ตฌํ˜„ํ•œ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ, C#์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

 


์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

ํ”„๋กœ์ ํŠธ ์ฝ˜์†”์•ฑ์œผ๋กœ "์‹ฑ๊ธ€ํ†คํŒจํ„ด"ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ > Singleton ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ

 public class Singleton
 {
     private static Singleton instance;

     private Singleton() { }

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

     public void ShowMessage()
     {
         Console.WriteLine("์‹ฑ๊ธ€ํ†ค ํŒจํ„ด");
     }
 }

 

์œ„ ์ฝ”๋“œ๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜์—ฌ instance๊ฐ€ null์ธ ๊ฒฝ์šฐ์—๋งŒ new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , null์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜์—ฌ, getInstance() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 


getInstance() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

๊ทธ๋Ÿฌ๋ฉด getInstance()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด, ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?


 static์„ ํ†ตํ•ด์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๊ธฐ์กด์˜ C++ ์ฝ”๋“œ์—์„œ๋Š” ์Šค์ฝ”ํ”„ ์—ฐ์‚ฐ์ž `::`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ getInstance()๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ–ˆ๋‹ค. C#์—์„œ๋Š” ํด๋ž˜์Šค์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ .์†์„ฑ๋ช…๊ณผ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด๋œ๋‹ค.

 

์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

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

// ์ดˆ๊ธฐํ™”
SingletonClass* SingletonClass::instance = nullptr;

int main() {
    // ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
    SingletonClass::getInstance()->ShowMessage();
    SingletonClass::getInstance()->destroy();

    return 0;
}

 

  • ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ getInstance()๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ.
  • ์Šค์ฝ”ํ”„ ์—ฐ์‚ฐ์ž ::๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ.
  • ์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์™ธ๋ถ€์—์„œ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ.

 

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

class Program
{
    static void Main(string[] args)
    {
        // ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
        Singleton singleton = Singleton.getInstance();
        singleton.ShowMessage();
    }
}

 

  • Java์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ getInstance()๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ.
  • getInstance() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ.