싱글톤(Singleton)
-- 객체의 인스턴스가 오직 1개만 생성 ( 여러 인스턴스를 만들지 않고 기존의 인스턴스를 활용)
-- 객체를 생성할 때마다 메모리 영역을 할당받아야 한다.
하지만 한번만 인스턴스를 생성한다면 메모리 낭비를 방지할 수 있다.
-- 싱글톤으로 구현한 인스턴스는 '전역' 이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능
단점
싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙" 을 위배 ( 수정이 어려워지고 테스트하기 어려워진다 )
Main
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Class_SingleTone {
internal class Program {
static void Main(string[] args) {
SingleTest sg1 = SingleTest.getInstance();
SingleTest sg2 = SingleTest.getInstance();
SingleTest sg3 = new SingleTest();
SingleTest sg4 = new SingleTest();
Console.WriteLine("주소값 : " + sg1.GetHashCode());
Console.WriteLine($"SingleTest01 getData : {sg1.getData()}");
Console.WriteLine("주소값 : " + sg2.GetHashCode());
Console.WriteLine($"SingleTest01 getData : {sg2.getData()}");
Console.WriteLine("주소값 : " + sg3.GetHashCode());
Console.WriteLine($"SingleTest01 getData : {sg3.getData()}");
Console.WriteLine("주소값 : " + sg4.GetHashCode());
Console.WriteLine($"SingleTest01 getData : {sg4.getData()}");
}
}
}
Singleton Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Class_SingleTone {
internal class SingleTest {
private static SingleTest inst;
private int data;
static Random rd = new Random();
public SingleTest() {
data = rd.Next(1,100);
}
public static SingleTest getInstance() {
if (inst == null) {
inst = new SingleTest();
}
return inst;
}
public int getData() {
return data;
}
}
}
'C# > C# Basic' 카테고리의 다른 글
C# Class : 클래스 02 (0) | 2022.12.16 |
---|---|
C# Class : 클래스 01 (0) | 2022.12.15 |
C# Queue : 큐 (0) | 2022.12.12 |
C# Stack : 스택 (0) | 2022.12.10 |
C# Method : 메서드 (0) | 2022.12.09 |