디자인 패턴& 싱글톤 패턴,Dictionary 검색
2023. 7. 26.

디자인 패턴

 

다양한 문제들을 프로그램을 통해 해결하는 것으로 문제 해결을 위한 설계를 그 기술적 구현 방침을 새우는 것.

-모듈의 세분화된 역할이나 모듈 간의 인터페이스 구현 방식 설계 시, 참조할 수 있는 전형적인 해결 방식

 

디자인 패턴의 종류는 다음과 같다.

 

1. 생성 패턴

2. 구조 패턴

3. 행동 패턴

디자인 패턴의 분류

 

 

싱글톤 패턴

-생성패턴(Creational pattern)

-하나의 클래스가 하나의 인스터스만 갖는다.(runtime 동안 단 하나의 인스턴스만 생성)

-전역 범위에서 그 인스턴스를 액세스할 수 있게 한다.

 

-해당 객체의 메모리를 정적으로 할당해 하나의 객체에만 접근한다.

->프로그램이 동작하는 동안 최초로 생성된 객체 하나에만 접근하는 것.

->호출하는데 아주 빠르게 접근할 수 있다.

 

-하나의 인스턴스만 존재하므로 인스턴스 내의 데이터 관리를 그곳에서 하면 된다.

싱글톤 패턴을 사용하지 않고 관리하는 코드를 구현하려면,

static 클래스를 생성 혹은 생성한 인스턴스를 유지해야하는데,

이는 코드의 품질을 낮추고 객체지향 프로그랭 관점에서 바람직하지 않다.

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class DataManager
    {//static으로 되어있으면 타입으로 접근한다.
        public static readonly DataManager instance = new DataManager();
        Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
        private DataManager() { //private으로 작성
        
        }

        public void LoadItemDatas()
        {
            dic.Add(100, new ItemData(100, "장검", 0, 8));
            dic.Add(101, new ItemData(101, "단검", 0, 5));
            dic.Add(102, new ItemData(102, "활", 0, 6));
            dic.Add(103, new ItemData(103, "도끼", 0, 10));
            dic.Add(104, new ItemData(104, "사슬 갑옷", 1, 0));
            dic.Add(105, new ItemData(105, "사슬 갑옷", 2, 0));

        }
    }
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {
        //생성자
        public App()
        {
            DataManager.instance.LoadItemDatas();
        }
        }
}

https://ivorycirrus.github.io/TIL/csharp-singleton/

 

C#에서 Singleton 디자인패턴을 구현하는 방법

싱글톤(Singleton)패턴은 애플리케이션을 실행한 이후 객체의 인스턴스가 단 한개만 생성하고자 하는 상황에서 자주 사용하는 디자인 패턴중 하나이다. C# 코드를 작성하면서 기존 습관적으로 사

ivorycirrus.github.io

 

 

Dictionary의 검색은 왜 빠른가?

저장할 때 key값에 해시 함수를 적용해 고유 index를 만들어 저장하기 때문이다.

key를 알면 해시 함수를 통해 바로 index를 알 수 있으므로 O(1)의 시간복잡도를 갖는다.

https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.keys?view=net-7.0 

 

Dictionary<TKey,TValue>.Keys Property (System.Collections.Generic)

Gets a collection containing the keys in the Dictionary<TKey,TValue>.

learn.microsoft.com

https://wer3799.tistory.com/126

 

C# Dictionary의 성능에 대해서.

원문 https://stackoverflow.com/questions/3460729/is-there-a-limit-to-entries-in-a-dictionary 질문 : 3000개정도의 다른 데이터들이 있다. 그것을 구조체에 저장해서 관리하려고 한다. 그리고 나의 어플리케이션이 시

wer3799.tistory.com

 

https://velog.io/@jujube0/Programmers-%EC%95%95%EC%B6%95

 

해시테이블(딕셔너리)이 빠른 이유, [Programmers] 압축

문제 바로가기 solution getnum : ABCD-Z 를 각각 1,2,3,26 으로 바꾸는 함수 이런식으로 하기도 하더라. ㄷㄷ 나는 added 에 추가하고, 그 index 를 이용하여 색인 번호를 찾았는데 dictionary 를 이용하여 바로

velog.io

https://analytics4everything.tistory.com/180

 

Set, Dict의 자료구조가 검색이 빠른 이유? hash 함수

Summary: set, dict은 해시함수를 이용한 해시값을 저장하고있는 해시테이블이란 자료구조를 사용하기 때문에, 빠른 탐색이 가능함. 해시는 임의의 변수(문자열 등)를 숫자로 변환하여, 매핑하는 것

analytics4everything.tistory.com

https://wikidocs.net/124827

 

4.2.3 HashTable & Dictionary

## 4.2.3 HashTable & Dictionary HasyTable과 Dictionary는 인덱스 사용하지 않음. **키(Key)**와 **값(Value)** 한…

wikidocs.net

 

'C# 기초 Homework' 카테고리의 다른 글

복소수와 사원수, 벡터  (1) 2023.08.13
Unity-Homework-몬스터 이동&공격(수정중)  (2) 2023.08.06
미션-보상 만들기  (2) 2023.07.31
2048  (0) 2023.07.26
20230719_Homework-디아블로_아이템사전 1~10  (0) 2023.07.20
myoskin