오늘는 스파르타 코딩 클럽 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 속성은 클래스의 유일한 인스턴스에 접근할 때 사용됩니다. instancenull인 경우에만 인스턴스를 생성하고, 이미 생성된 경우에는 기존 인스턴스를 반환합니다. 이로써 어디서든 같은 인스턴스에 접근할 수 있게 됩니다.

코드 설명

  • GameData 클래스: 게임 데이터를 저장하는 싱글톤 클래스로, 몬스터와 캐릭터 목록을 관리합니다.
  • MonsterCharacter 클래스: 각각 몬스터와 캐릭터의 속성을 정의합니다.
  • 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()
        {
                // 필요한 경우 여기에서 몬스터와 캐릭터를 초기화할 수 있습니다.
        }
}

 

 

오늘 배운점!

 

싱글톤을 사용하여 전역변수를 사용하지 않고도 데이터를 불러올 수 있게 되었습니다.

반응형