C#/C# Basic

C# Class : 클래스 Singleton

HicKee 2022. 12. 18. 21:39

싱글톤(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