오늘는 스파르타 코딩 클럽 unity 게임 개발 과정 13일차(팀과제 준비와 싱글톤을 사용하는 법)
2023. 11. 16. 02:34ㆍ스파르타코딩클럽 게임개발
반응형
오늘은 팀과제를 준비하면서 뼈대를 잡을 코드를 만들 것 입니다.
내가 사용한 싱글톤을 설명하면서 뼈대 코드를 어떻게 만들었는지 보여줄려고 합니다.
싱글톤 패턴이란?
싱글톤 패턴은 소프트웨어 디자인 패턴 중 하나로, 클래스의 인스턴스가 하나만 생성되도록 보장하는 패턴입니다.
이것은 전역 변수를 사용하지 않고 하나의 인스턴스를 전역적으로 사용하고자 할 때 유용합니다.
이 코드 예제에서는 게임 데이터를 저장하는 GameData
클래스를 싱글톤으로 구현하고 있습니다.
// 게임 데이터를 저장할 싱글톤 클래스 정의
public class GameData
{
private static GameData instance;
// ... (생략)
// 싱글톤 인스턴스에 액세스하는 공용 메서드
public static GameData Instance
{
get
{
if (instance == null)
{
instance = new GameData();
}
return instance;
}
}
// ... (생략)
}
위의 코드에서 Instance
속성은 클래스의 유일한 인스턴스에 접근할 때 사용됩니다. instance
가 null
인 경우에만 인스턴스를 생성하고, 이미 생성된 경우에는 기존 인스턴스를 반환합니다. 이로써 어디서든 같은 인스턴스에 접근할 수 있게 됩니다.
코드 설명
GameData
클래스: 게임 데이터를 저장하는 싱글톤 클래스로, 몬스터와 캐릭터 목록을 관리합니다.Monster
및Character
클래스: 각각 몬스터와 캐릭터의 속성을 정의합니다.InitializeData
메서드: 필요에 따라 데이터를 초기화하는 메서드입니다.AddMonster
,GetMonsters
,AddCharacter
,GetCharacters
메서드: 몬스터와 캐릭터를 추가하고 가져오는 메서드입니다.
사용 예제
GameData gameData = GameData.Instance;
Monster dragon = new Monster { Name = "Dragon" };
gameData.AddMonster(dragon);
Character player = new Character { Name = "Player1" };
gameData.AddCharacter(player);
List<Monster> monsters = gameData.GetMonsters();
List<Character> characters = gameData.GetCharacters();
위의 예제에서는 게임 데이터 싱글톤을 생성하고 몬스터와 캐릭터를 추가한 후, 이를 가져와서 사용하는 방법입니다.
실제 사용 코드
게임 데이터에 캐릭터와 몬스터 그리고 아이템과 스킬이 담겨져있는 것을 확인할 수 있다.
public class GameData
{
private static GameData Instance;
// 몬스터와 캐릭터를 저장할 데이터 구조
private List<Monster> monsters;
private List<Character> characters;
private List<Item> items;
private List<Skill> skills;
// 인스턴스를 생성하는 private 생성자
private GameData()
{
monsters = new List<Monster>();
characters = new List<Character>();
items = new List<Item>();
skills = new List<Skill>();
InitializeData(); // 필요하다면 데이터를 초기화할 수 있습니다.
}
// 싱글톤 인스턴스에 접근하는 public 메서드
public static GameData I
{
get
{
if (Instance == null)
{
Instance = new GameData();
}
return Instance;
}
}
// 몬스터와 캐릭터와 상호작용하는 메서드들
public void AddMonster(Monster monster)
{
monsters.Add(monster);
}
public void RemoveMonster(Monster monster)
{
monsters.RemoveAll(x => x.Name == monster.Name);
}
public List<Monster> GetMonsters()
{
return monsters;
}
public void AddCharacter(Character character)
{
characters.Add(character);
}
public void RemoveCharacter(Character character)
{
characters.RemoveAll(x => x.Name == character.Name);
}
public List<Character> GetCharacters()
{
return characters;
}
public void AddItem(Item item)
{
items.Add(item);
}
public void RemoveItem(Item item)
{
items.RemoveAll(x => x.Name == item.Name);
}
public List<Item> GetItem()
{
return items;
}
public void AddSkill(Skill skill)
{
skills.Add(skill);
}
public void RemoveSkill(Skill skill)
{
skills.RemoveAll(x=> x.Name == skill.Name);
}
public List<Skill> GetSkill()
{
return skills;
}
// 필요한 경우 더 많은 메서드들을 추가할 수 있습니다.
private void InitializeData()
{
// 필요한 경우 여기에서 몬스터와 캐릭터를 초기화할 수 있습니다.
}
}
오늘 배운점!
싱글톤을 사용하여 전역변수를 사용하지 않고도 데이터를 불러올 수 있게 되었습니다.
반응형
'스파르타코딩클럽 게임개발' 카테고리의 다른 글
오늘는 스파르타 코딩 클럽 unity 게임 개발 과정 15일차(팀과제 C# 파일 경로 및 조작 설명) (0) | 2023.11.18 |
---|---|
오늘는 스파르타 코딩 클럽 unity 게임 개발 과정 14일차(팀과제와 열거형 설명) (0) | 2023.11.17 |
오늘는 스파르타 코딩 클럽 unity 게임 개발 과정 12일차(4주차 과제 인터페이스와 Func과 Action) (0) | 2023.11.15 |
오늘는 스파르타 코딩 클럽 unity 게임 개발 과정 11일차(개인과제 텍스트 RPG) (0) | 2023.11.14 |
엊그제는 스파르타 코딩 클럽 unity 게임 개발 과정 10일차(개인과제 텍스트 RPG) (0) | 2023.11.13 |