본문 바로가기

IT/c#

[c#] c#으로 싱글톤 패턴을 구현하자

유니티에서 크고작은 게임을 제작하게 되면, 결국 데이터를 주고 받는데서 많은 고민을 하게 됩니다.

그러면, 유용하게 쓰이는 방법이 Static 으로 변수를 선언하여, 데이터의 호출과 출력을 자유롭게 하는 법인데요, 하지만, 무분별한 Static 변수 사용은, 메모리 관리 측면에서 많은 에로사항을 유발하게 된다고 알려져, 어느정도 규모가 커지면, 적절하게 사용하는 것이 중요하게 됩니다.

 

그런점에서 최초부터 데이터의 생성을 싱글톤 패턴을 이용하여 관리하게 되면, 매우 제작이 용이하게 됩니다.

 

저도, C# 전문가가 아니기 때문에 정확하게 싱글톤 처리가 어떤점에서 일반 Static 보다 이점이 있다고 말하기는 어렵지만, 실제로 실무에서 게임을 제작할땐 먼저 싱글톤으로 데이터를 생성하고 사용하게 되는 것 같습니다.

 

좀더 정확한 정보는, 리플로 남겨주시는 현자가 나타나면! 내용을 업데이트 해보도록 하지요!!

 

오늘은 제가 게임을 제작할 때 먼저 선언하는 C# 코드를 공유해볼까합니다.

 

 

GameData.cs

 

  1. using UnityEngine;
  2. using System.Collections;
  3.    
  4. public class GameData
  5. {
  6.    
  7.     private static GameData instance=null;
  8.     public static GameData Instance
  9.     {
  10.         get
  11.         {
  12.             if (instance==null)
  13.             {
  14.                 instance = new GameData();
  15.             }
  16.             return instance;
  17.         }
  18.     }
  19.    
  20.     private GameData()
  21.     {
  22.     }
  23.    
  24.     public int _test; // 선언할 변수들
  25. }

 

이게 정석적인 방법인지는 모르겠지만, 제가 실무에서 사용하고 있는 형태입니다. 여기서 주목 하실 부분은 MonoBehavier 를 상속 받지 않기 때문에, 유니티 프로젝트내에 존재하기만 해도 사용할 수 있다는 점이지요.

 

실제로 호출을 하여 사용할때는, 다음과 같은 형태로 호출할 수 있습니다.

 


데이터를 호출하는 방법


 

  1. GameData.Instance._test;

 

얼핏 구글링을 하여 보니, Instance 로 데이터를 호출하는 것이 메모리 관리 측면에서 별로라는 이야기도 있던데, 저도 C# 을 아직 파보지 않아서, 이유는 잘 모르겠습니다 ^^// 누가 잘 정리해주시면 감사할 것 같군요!! 아니면, 조만간 C# 스터디를 진행할 예정인데, 거기서 좀 연구를 해보고, 공유를 해보도록 하겠습니다.

 

아래는, 마이크로소프트 측에서 확인할 수 있는 싱글톤의 설명입니다. 참조하시길 바랍니다.

http://msdn.microsoft.com/en-us/library/ff650316.aspx