• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

id 활용에 대해서 궁금합니다.

21.11.17 16:19 작성 조회수 148

0

class Player

    {

        static private int counter = 1;

        private int id;

        private bool isDespose = false;

        public int GetCounter() { return counter; }

        public int GetId() { return id; }

        public Player()

        {

            id = counter;

            counter++;

        }

 

        ~Player()

        {

            if (!isDespose)

                Dispose();

        }

 

        public void Dispose()

        {

            isDespose = true;

            Console.WriteLine("{0}ID 삭제 Ok....", id);

            GC.SuppressFinalize(this);

        }

    }

    class TestSample

    {

        static void Main(string[] args)

        {

            Player player1 = new Player();

            Console.WriteLine(player1.GetId()); 

            Player player2 = new Player();

            Console.WriteLine(player2.GetId());

            Player player3 = new Player();

            Console.WriteLine(player3.GetId());

            Player player4 = new Player();

            Console.WriteLine(player4.GetId());

            player4.Dispose();

            Player player5 = new Player();

            Console.WriteLine(player5.GetId());

            Console.WriteLine(player4.GetId());

 

            for(int i=0; i<5;i++)

                Console.WriteLine(i);

        }

    }

만일 객체를 제거하면 어떤가 궁금해서 소멸자로 지워보았습니다. 이럴 경우에 4번째를 제거해도 ID는 4로 남아있습니다.

그렇다고 당기면 다른 계정의 ID들이 바뀌니 안될것같은데 이런 제거하는 계정은 어떻게 처리를하나요~?

답변 1

답변을 작성해보세요.

0

ID를 굳이 회수할 필요 없습니다. 
그냥 +1씩 계속 늘리면 그만이기 때문이죠.
[그럼 아이디가 언젠가 고갈되지 않을까?] 싶으시겠지만
64비트 정수로 표현할 수 있는 숫자의 범위는 상상을 초월하고
100년 게임을 운영해도 0.00000.....1%도 사용하지 못합니다.

그리고 오브젝트 구별을 위한 임시 ID가 아닌, 
계정 별로 고정인 ID의 경우 서버나 클라에서 발급하는게 아니라
DB쪽에서 발급하는데 이 때도 비슷하게 숫자는 계속 증가를 (auto increment) 시킵니다.