public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // ์์ฑ์๋ ์ธ๋ถ์์ ํธ์ถ๋ชปํ๊ฒ private ์ผ๋ก ์ง์ ํด์ผ ํ๋ค. } public static Singleton getInstance() { return instance; } public void say() { System.out.println("hi, there"); } }
๊ณต์ง์ ์๋ ๋งํฌ๋ก ๋ณต์ฌํด์ ๋ง๋ค์๋๋ฐ ํฐํธ๊ฐ ์ด์ ....
์ํผ ๋ค์ ์๋ฌธ์ผ๋ก ๋ณต์ฌ
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// ์์ฑ์๋ ์ธ๋ถ์์ ํธ์ถ๋ชปํ๊ฒ private ์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
}
public static Singleton getInstance() {
return instance;
}
public void say() {
System.out.println("hi, there");
}
}
ํ์ค ํ์ค ์น์ ํ๊ฒ ์ค๋ช ํด์ฃผ์ค๋ถ
๊ฒ์ํด๋ด๋ ์ ๋ง ๋ชจ๋ฅด๊ฒ ์. ๊ฐ์ ๋ด์ฉ๋ง ๋์ค๊ณ
์ ์ธ์ด๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ํด์ํด์ฃผ๋ ๊ธ์ด ์์
์ฑ๊ธํค์ ๋ํ์ค๋ช ์ ์ฝ์ด๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ
์ด๊ฒ๋ ์์ค์ด ๋ฎ์ ์ง๋ฌธ์ด๋ ค๋ ๋์๊ฒ ์์ฒญ ์ด๋ ค์ด ์ง๋ฌธ์ธ๋ฐ
ํ์ค ํ์ค ์น์ ํ๊ฒ ์ค๋ช ํด์ฃผ์ค๋ถ
๊ฒ์ํด๋ด๋ ์ ๋ง ๋ชจ๋ฅด๊ฒ ์. ๊ฐ์ ๋ด์ฉ๋ง ๋์ค๊ณ
์ ์ธ์ด๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ํด์ํด์ฃผ๋ ๊ธ์ด ์์
์ฑ๊ธํค์ ๋ํ์ค๋ช ์ ์ฝ์ด๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ
์ด๊ฒ๋ ์์ค์ด ๋ฎ์ ์ง๋ฌธ์ด๋ ค๋ ๋์๊ฒ ์์ฒญ ์ด๋ ค์ด ์ง๋ฌธ์ธ๋ฐ
์์ฑํ ๋ ํฐํธ๊ฐ ์ด์ํด ๋ณด์์ผ๋ ์ฌ๋ฆฌ๊ณ ๋ณด๋ ๊นจ๋ํจ.
์ ์ฝ๋๊ฐ ์ดํด๊ฐ ์๊ฐ๋ค๋ฉด static์ด๋ผ๋ ํค์๋์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ๊ฒ ๊ฐ์๋ฐ C# static ์ด๋ฐ์์ผ๋ก ๊ตฌ๊ธ๋งํด์ ๊ณต๋ถํด๋ด
๊ทธ๊ฑฐ๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ๊ฐ๋ ์๋๊ฐ์
์์ ์ค๋ต์
์ผ๋ง์ static ๋ณ์์ ๋ํด์ ์์๋ณธ ๋ฐ๋ก ๊ทธ๋ ๋๋ฐ์
์ด๋ ค์ด์ฒ ์ฌ์ง ๋ง์๊ณ ์ค๋ช ์ข ๋ถํ๋๋ฆฝ๋๋ค
๊ทธ๋ผ private static์ด๋ผ๋๊ฑด ์ด๋ป๊ฒ ์ฑ๋ฆฝํ ์ ์๋์ง ์ค๋ช ํ ์ ์์? ์ ์ง๋ฌธ์ ํด๋๊ณ ๋ ๋ง์ด ๋ง๋ค๊ณ ์ฐ๊ธฐ๋๊ฑฐ์ผ ๋๋์ฒด
์ฌ๊ธฐ์ ์ค๋ช ๋ฐฑ๋ ํด๋ดค์ ๊ตฌ๊ธ๋ง 1์ด๋ฉด ๋ ์ข์ ์๋ฃ ๋์ค๋๊น ๊ทธ๋ ๊ฒ ํ๋ผํ์์
๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋๊ฑฐ ์๋๊น์
๊ฐ๋ฅด์ณ ์ฃผ๊ธฐ ์ซ์ผ๋ฉด ๊ทธ๋ฅ ๋ฌด์ํด ์ฃผ์๋ฉด ์๋ ๊น์ ์ ๋ ๋์ด์ ๋ถํ ์๋๋ฆฌ๊ฒ ์ต๋๋ค
๊ฐ๋ฅด์ณ์ฃผ๊ฐ ์๊น์ฐ์ ๊ฒ ๊ฐ์ผ๋ ์์คํ ์ง์ ๊ฐ์งํ์๊ธฐ ๋ฐ๋๋๋ค
๋ํํ ๊ฐ๋ฅด์ณ์ฃผ๊ณ ์ถ์๊ฑด ์ฌํ์ฑ๋ฐ์ ์์
์ฌํ์ฑ ๊ทธ๋ฐ๊ฑด ์ฌ์ํ ๊ฒ์ ๋๊ฐ ๋ด ์นํ์ด๋ผ๋ ๋๋๊ฑด ์๋์์์ ใ
๋ ์ ๋ฐ๋ง์ด์ธ์ ใ ์ฌํ์ฑ ์ข์ผ์๋ค ใ
๋๋ค ์ง์์ ์ด๋ฉด์ ๋ฐ๋ง ํ๋๊ฒ ์ฌํ์ฑ์ด๋ผ๊ณ ๊ฐ๋ฅด์ณ ์ฃผ์๋๊ฐ์ ใ ใ ใ
์กฐ์ฌํด์ผ ํ ์ฌ๋์ด ์๋ค๋๊ฑธ ๋ฐฐ์๊ฐ๋๋ค.
๊ฐค๋ฌ๋ฆฌ ์ผ๋ฐ์ ์ธ ๋ฌธํ๋ ๋ชจ๋ฅด๋ฉด์ ๋ฐ๋งํ๋๊ณ ๋ฐ๋ํ๋ ๊ผฌ๋ผ์ง ๋ด๋ผใ ใ ใ ๋ง์ ์ ๋ค๋ฉด ์กด๋๋ง ์ด์ฌํ ํด์ฃผ๋ ๋ค๋ฅธ๋ฐ๋ก ๊บผ์ ธ
์ฒซ๋ฒ์งธ. ์ ์ Singleton instance ๊ฐ์ฒด๋ฅผ ์์ฑ์๋ก ์ด๊ธฐํ ๋ฐ ํ ๋น ๋๋ฒ์งธ. ์์ฑ์ ํจ์ ์ธ๋ฒ์งธ. ์ ์ ํจ์, Singleton์ ๋ฐํํ๋ ํจ์๋ก instance๋ฅผ ๋ฐํํด์ค ๋ค๋ฒ์งธ. ํ์ด๋ฐ์ด ์ถ๋ ฅ.
Singleton () ์ด ์์ด์ ์ด๋ฆ์ ๋ฐ๋์ Singleton ์ด์ฌ์ผ ํฉ๋๊น ?
๊ทธ๋ฆฌ๊ณ ํด๋์ค ์์์ ์์ ํด๋์ค๋ฅผ ์ด์ฉํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ์ฌ๊ทํธ์ถ ๊ฐ์ ํ์์ด ์ผ์ด๋์ง ์์๊น์
์์ฑ์๋ ๋ด์ฉ์์ด ๊ทธ๋ฅ { } ๋ง ์๋ค์ ?
๊ฐ์ฅ ์ข์ ๋ต๋ณ์ด์ จ๋๋ฐ ๊ท์ฐฎ๊ฒ ์ฌ์ง๋ฌธํด์ ์ฃ์ก . ๋ต๋ณ ์ํด์ฃผ์ ๋ ๋์
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/constructors
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/private-constructors
๋ค๋ฅธ์ฌ๋๋ค
๋ฐ์์ด ๋๋ถ๋ถ ๋ถ์ ์ ์ธ๊ฑธ ๋ณด์๊ณ ์๋ชป๋์ ์ ์์๋ฉด์ข๊ฒ ๊ณ , ์์ฑ์ ์คํํฑ ๊ฐ๋ ์ดํดํ์๋ฉด ์ง๋ฌธํ์ ๋ด์ฉ ๋ค ํด๊ฒฐ๋ฉ๋๋ค.
์คํํฑ์ด ๋ญ์ง ๊ฐ๋ ๋ถํฐ ์ ๋ ํ๊ณ ๊ณต๋ถํด๋ด. ์ ๊ฒ ์คํํฑ ํ์ฉ์์ ์ ์ผ ๊ธฐ๋ณธ์ ์ด๊ณ ๊น๋ํ ์ฝ๋์
static ํค์๋๋ ์์ฑ์ ๊ฐ๋ ์ ์์ง ์ ๋ชจ๋ฅด๋๊ฒ๊ฐ์๋ฐ ๋จผ์ ๊ณต๋ถํ๋๊ฒ ์ข์๊ฒ๊ฐ์์
๊ณต๋ถํ์ธ์
๊ณต๋ถํ๋ ์ค์ ์ง๋ฌธํ๊ฑด๋ฐ์ . ์์ฑ์๋ฅผ ์ง๊ธ ๊ฒ์ํด๋ณด๊ณ ์๋๋ฐ ์์ฑ์๋ฅผ ๊ฒ์ํด๋ด์ผ ํ๋ค๋๊ฑธ ๋ฏธ๋ฆฌ ์์ ์์์๊น์ ?
๊ฑ ๊ธฐ์ด๋ถํฐ ์ญ ๋ฐ๋ผ์์ผ๋ฉด ๋งํ๋งํ ์ฝ๋๋ ์๋๋ฐ
๊ทธ๋ด๊ฑฐ๋ฉด ํ_์์ ๋ค๋ ๊ฒ ์ฃ .ํ_์์ด ์ ๊ธ์ง์ด์ผ๊น์
c ์ธ์ด ์ ๋ ํ๋ ์์ค์์ ์ ๋ํฐ ํด๋ณด๊ฒ ๋ค๊ณ ๋ฐ๋ผํ๋ ์ค์ด๋ผ ๊ณ ๊ธ ๋ฌธ๋ฒ์ ์ทจ์ฝํ๋ฏ์
๊ธฐ์ด์์์๊ฐ ์์ ๋๋ฆฌ์น๋ผ
๊ณ ๊ธ ๋ฌธ๋ฒ๋์๋๋ค
๋ด๊ฐ ๋ชจ๋ฅด๋ฉด ๊ณ ๊ธ์ธ๊ฑฐ์ฃ ์ฌ๋๋ง๋ค ๋ค๋ฅธ๊ฒ๋๋ค
์ง๋ฌธ๊ธ ์ ๋ชฉ๋ถํฐ๊ฐ ์ข...
์ด๊ฑฐ ๋ณด๋๊น ์์นจ์ ๋ด๋น์ ์ฃ์ผ ์ง๋ฌธ ๋๋ฐฐํ๊ฒ ํฉ๋ฆฌํ ๋ผ๋ฒ๋ฆผ
์ ๋ชฉ์ด๊ทธ๋ก ์๋๋ค ์ฑ๊ธํค์ด ์์ค์ด ๋์? ๋ญ์ง? ํ๊ณ ๋ค์ด์๋ค๊ฐ ๋ด์์ ๊ณ ๊ฐ๋ค
static์ด ๋ญ์ง ๋ชจ๋ฅด๋ฉด ์ฌ๊ธฐ ์จ์์ผ๋ ๋ด๋ผ ๊ตฌ๊ธ์ static๋ง ๊ฒ์ํด๋ ๋์ค๋ ๊ฑด๋ฐ, "์ด๊ฒ ๋ค์ธ๋ฐ์" ํ๋ฉด ๊ฒ์ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๊ฑฐ์
https://velog.io/@charamee/static-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC
๋๊ธ ๋ง๋๋ก C# ๊ธฐ๋ณธ์ ๋ชจ๋ฅด๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ฑ ํ๋ ์ฌ์ ์ฝ์ด์ C# ํ์ตํ๋๊ฑธ ์ถ์ฒํ๋ค. ๋ด ๊ฐ์ธ์ ์ธ ์ถ์ฒ์ "์ด๊ฒ์ด C#์ด๋ค" ์