์ฑ๊ธํค ํจํด์ ํน์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๊ณ , ์ ์ญ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋์์ธ ํจํด์ด๋ค.
์ด๋ฅผ ํตํด ์์คํ
๋ด์์ ๋จ์ผ ๊ฐ์ฒด๋ง ์กด์ฌํ๊ฒ ๋ณด์ฅํ ์ ์๋ค. ์ด์ ์ 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() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์ค ์ฌ์ฉ.