신입 개발자 공부 과정

1/10 - dictionary2 / 디자인 패턴(싱글톤) 본문

C#/수업 내용

1/10 - dictionary2 / 디자인 패턴(싱글톤)

Lewisjkim 2022. 1. 10. 22:55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Smithy//어떤 아이템을 만들어주세요
    {
        //private Dictionary<int, WeaponData> dic;
        public Smithy()//Dictionary<int, WeaponData> dic)//생성자 - app에 있는 dictionary값들(id, 등등 쓸려고)
        {

            //this.dic = dic;
        }

        public Weapon CreatWeapon(int id)//메서드= json에 있는 id값을 입력할거다// 다만 id값은 현재 app이 가지고 있다.
        {
            
            WeaponData data = DataManager.GetInstance().GetWeaponData(id);
            return new Weapon(data.id, data.name, data.damage, data.price);
        }
    }
}​
 

Mr. Data Converter

 

shancarter.github.io

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;

namespace ConsoleApp2
{
    class App
    {
        Dictionary<int, WeaponData> dicWeaponData = new Dictionary<int, WeaponData>();
        public App()
        {
            string json = File.ReadAllText("./weapon.data.json");
            Console.WriteLine(json);
            WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
            foreach(var data in weaponDatas)
            {
                this.dicWeaponData.Add(data.id, data);
            }
            Console.WriteLine(this.dicWeaponData.Count);

            var mydata = this.dicWeaponData[100];
            Console.WriteLine("{0}{1}{2}{3}", mydata.id, mydata.name, mydata.damage, mydata.price);
        }
    }
}

-------------------

디자인 패턴:

 

 

 

소프트웨어 디자인 패턴 - 위키백과, 우리 모두의 백과사전

소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로

ko.wikipedia.org

-싱글패턴: 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한  객체를 리턴한다.

 

 

싱글턴 패턴 - 위키백과, 우리 모두의 백과사전

싱글턴 패턴 위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

 

Design Pattern - Singleton Pattern

Design Pattern - Singleton Pattern Singleton pattern is one of the simplest design patterns in Java. This type of design pattern comes under creational pattern as this pattern provides one of the best ways to create an object. This pattern involves a singl

www.tutorialspoint.com

 

1.DataManager 클래스를 싱글톤으로 만들고

2.Loaddatas 메서드를 정의하고 json 파일을 읽어 역직렬화 하고 사전에 넣으세요

3.DataManager의 인스턴스 메서드를 정의하고 사전에서 데이터를 가져오게 만드세요.

 

파일저장하기

신규유저 기존유저 판별하기

파일 로드

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

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;

namespace ConsoleApp2
{
    class App
    {
       
        public App()
        {
            //데이터를 로드하고 싶을때 - 딕셔네리 값이 올라옴
            DataManager.GetInstance().LoadDatas();
            Smithy smithy = new Smithy();//대장간 인스턴스 생성
            Weapon weapon = smithy.CreatWeapon(100);//무기 넘버100을 만들어 주세요
            Console.WriteLine("----\nnb:{0}\nname:{1}",weapon.Id, weapon.Name);

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

namespace ConsoleApp2
{
    class WeaponData
    {
        public int id;
        public string name;
        public float damage;
        public int price;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Weapon
    {
        public int Id {get; private set;}//조회는 가능하고 설정은 안되게
        public string Name { get; private set; } 
        private float damage;
        private int price;

        //생성자 //Weapon 정보 입력 된다.
        public Weapon(int id, string name, float damage, int price)
        {
            this.Id = id;
            this.Name = name;
            this.damage = damage;
            this.price = price;

        }
    }
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class DataManager//싱글톤 클래스
                     //데이터들을 관리
    {
        private Dictionary<int, WeaponData> dicWeaponData = new Dictionary<int, WeaponData>();//캡슐화-app class에 있던 딕셔네리 = 변하지 않는 데이터다=벨런스패치

        private static DataManager instance = new DataManager();//private static이어야 한다
        private DataManager()//생성자
        { 
        
        }
        public static DataManager GetInstance()//DataManager를 반환해 주는 GetInstance method생성
        {
            if (DataManager.instance == null) DataManager.instance = new DataManager();//null이면 새로운 DataManager 객체를 만들어주고
            return DataManager.instance;//기존 DataManager의 인스턴스를 반환해준다
        }
        //------------------------
        //데이터 로드도 한다.
        public void LoadDatas()
        {
            string json = File.ReadAllText("./weapon.data.json");
            //Console.WriteLine(json);
            WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
            foreach (var data in weaponDatas)
            {
                this.dicWeaponData.Add(data.id, data);
            }
            //Console.WriteLine(this.dicWeaponData.Count);

            var mydata = this.dicWeaponData[100];
            Console.WriteLine("------\nid:{0}\nname:{1}\ndamage:{2}\nprice:{3}", mydata.id, mydata.name, mydata.damage, mydata.price);
        }
        
        public WeaponData GetWeaponData(int id) //데이터를 가져오고싶다
        {
            return this.dicWeaponData[id];
        }
    }
}