-
C# / 싱글톤패턴 / 1일1코드C#/1일 1코드 2020. 5. 15. 23:02
코드는 아닌거 같지만 매번 적으면서 술술 되는게 아니라 꼭 한번씩 보면서 적어야해서 익숙해지면 좋겠다 싶어서 그간 쓰던 DataManager 형식으로 한번 써봄.
코드는 아닌데 해도 될까 싶지만 노트에 썼던거 참고하고, 조금의 블로그 포스팅 참고하면서 주석 달면서 쭉 기재했는데 맞는지 아닌지는 모르겠다.
내가 쓰는거에 대해 확신이 서지 않는건 문제인듯.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061using System.Collections;using System.Collections.Generic;using System.Runtime.CompilerServices;using UnityEngine;using Newtonsoft.Json;using System.Linq;//우선 싱글톤의 정의//해당 클래스의 인스턴스가 하나만 생성이 되게하여 같은 인스턴트를 계속 참조하면서 객체 생성횟수를 줄이고//어디서든지 그 인스턴스에 접근이 가능하도록 만드는 패턴//간단하게 외부에서는 못건들게 함이라고 써도 될듯// 유니티에서 사용할때는 상속 지우고 작성하기public class DataManager{private static DataManager Instance;private Dictionary<int, CharacterData> dicCharacterDatas;private DataManager(){//관리할 데이터 및 Instance 선언↑ 후 초기화this.dicCharacterDatas = new Dictionary<int, CharacterData>();// Dictionary 사용이유 > 컬렉션중 검색(탐색능력)이 제일 빠름// Key를 넣으면 Value 값들이 도출됨.}public static DataManager GetInstance(){if(DataManager.Instance == null){DataManager.Instance = new DataManager();return DataManager.Instance;}return DataManager.Instance;// 간단히 보면 인스턴스가 null이면 새로 만들고 아니면 기존거 반환해준단거}public void LoadDatas(){string json = File.ReadAllText("./data/character.json");TextAsset charaTextAsset = Resources.Load("Data/character_data") as TextAsset;// 경로를 다 적지 않더라도 해당 프로젝트의 bin/Debug 경로에 있는 파일을 읽어옴// C# >> 폴더가 추가됬다면 "./폴더명/파일명.확장자" 까지 적을 것// Unity >> 경로 없이 적으면 Resources에 있는걸 읽기에 적는 방식은 동일하나 확장자까지 적지 않아도 됨// json 파일을 사용할때는 using Newtonsoft.Json; 을 사용 할수있도록// Import하던가 C#은 솔루션용 NuGEt패키지 관리에서 json 다운 받기string path = charaTextAsset.text;//string 으로 맞춰줌, 그냥 C#의 경우 json 넣으면 됨this.dicCharacterDatas = JsonConvert.DeserializeObject<CharacterData[]>(path).ToDictionary(x => x.id, x => x);//JsonConvet를 통해 역직렬화, 바로 Dictionary로 담아내는 코드//역직렬화 : 직렬화된 파일 등을 역으로 직렬화하여 다시 객채 형태로 만드는 것.}public CharacterData GetCharacterDatasById(int id){return this.dicCharacterDatas[id];//id를 통해 해당 id에 해당하는 데이터를 얻음}}cs 'C# > 1일 1코드' 카테고리의 다른 글
1일 1코드 / SerializeObject (0) 2020.05.20 C# / 프로퍼티 / 1일 1코드 (0) 2020.05.19 Unity / transform.GetChild() / 1일 1코드 (0) 2020.05.17 Unity / Vector3.Distance / magnitude / 1일 1코드 (0) 2020.05.16 Unity / Transform.LookAt / 1일 1코드 (0) 2020.05.14