dotnet 8.0 ์ฝ์๋ก ์์ฑํ์.
public class CharacterStat
{
public int HP { get; set; }
public int MP { get; set; }
public int ATK { get; set; }
}
public class CharacterGameData
{
public string Name { get; set; } = "Default";
public CharacterStat Stat { get; set; } = new();
}
์บ๋ฆญํฐ ์คํฏ ๋ด๊ณ , ์ด๋ฆ ๋ด๊ณ ... ๋จ์ํ ๋ฐ์ดํฐ๋ง ๋ด์ ๊ฑฐ์.
Json์ด๋ค๊ณ ํ์ผ๋ System.Text.Json ์ฌ์ฉํ ๊ฑฐ์.
JsonSerializer๊ฐ ์ง๋ ฌํ ํ ์๊ตฌ์ฌํญ์ผ๋ก๋ ์ง๋ ฌํ ํ๊ณ ์ ํ๋ ๋ฉค๋ฒ๋ฅผ get; set; ํ๋กํผํฐ๋ก ํ์ํ ๊ฒ.
์ ๋ง ๊ฐ๋ตํ๊ฒ๋ง ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ถ์กฑํ ๊ฒ ๋ง์. ์ด์ ์์์ ๋ถ์ด๋ฉด ๋จ.
์
๊ทธ๋ ์ด๋ ๊ธฐ๋ฅ์ด๋ผ๋๊ฐ... ๊ทธ๋ฐ ๊ฑด CharacterGameData ์ฐธ์กฐํ๋ ํด๋์ค ํ๋ ์์ฑํด์ ๊ฐ์ข
์
๊ทธ๋ ์ด๋ ๊ธฐ๋ฅ, ๋ค์ด๊ทธ๋ ์ด๋ ๊ธฐ๋ฅ, ๋ณ๋ณ ๊ธฐ๋ฅ๋ค ๋ค ๋ง๋ค์ด์ ์ธ๋ถ์ ์ ๊ณตํ๋ฉด ๊น๋ํจ. ์ฌ๊ธฐ์ CharacterSlot์ด๋ผ๊ณ ํด๋ณด์.
public class CharacterSlot
{
private readonly CharacterGameData gameData;
public CharacterSlot(CharacterGameData gameData)
{
this.gameData = gameData;
}
public void UpgradeHP()
{
gameData.Stat.HP += 1;
}
public void UpgradeMP()
{
gameData.Stat.MP += 1;
}
public void UpgradeATK()
{
gameData.Stat.ATK += 1;
}
}
์ง๋ ฌํ๋ ํด๋์ค์ ๊ธฐ๋ฅ ์์ฑํ๋ ๊ฑด ๊ฒฝํ์ ์ข์ง ์์์. ์ด๋๊น์ง๋ ๋ฐ์ดํฐ๋ก๋ง ์ทจ๊ธํ๋ ๊ฒ ํ๋ช
ํ ๋๋
์ฝ์์์ ํ
์คํธํด๋ณด๋ ์ฝ๋, ๊ท์ฐฎ์์ CharacterSlot์ ์ ์.
using System.Text.Json;
var charactersData = new Dictionary<string, CharacterGameData>
{
{ "Alice", new() },
{ "Bob", new() }
};
charactersData["Alice"].Name = "Alice";
charactersData["Alice"].Stat.HP = 1;
charactersData["Alice"].Stat.MP = 2;
charactersData["Alice"].Stat.ATK = 3;
charactersData["Bob"].Name = "Bob";
charactersData["Bob"].Stat.HP = 4;
charactersData["Bob"].Stat.MP = 5;
charactersData["Bob"].Stat.ATK = 6;
var aliceSerialized = JsonSerializer.Serialize(charactersData["Alice"]);
var bobSerialized = JsonSerializer.Serialize(charactersData["Bob"]);
Console.WriteLine(aliceSerialized);
Console.WriteLine(bobSerialized);
// ์ถ๋ ฅ ๊ฒฐ๊ณผ
// {"Name":"Alice","Stat":{"HP":1,"MP":2,"ATK":3}}
// {"Name":"Bob","Stat":{"HP":4,"MP":5,"ATK":6}}
์ด์ ์ผ ๋ดค๋ค์. ๋ง์ ๋์์ด ๋์์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค!!