덴바의 노트

내일배움캠프 10일차 TIL 본문

프로그래밍 노트/TIL

내일배움캠프 10일차 TIL

덴바 2024. 4. 29. 21:12

 

 

오늘의 학습 키워드
  • 싱글톤 패턴 디자인

 

오늘부로 내일배움캠프 10일차가 되었습니다.

 

이번에는 저번과 다르게 팀 프로젝트로, 지난 주에 만든 Text RPG를 콘솔로 구현하는 것입니다.

 

추가된 내용은 바로 Dungeon.

 

즉, 몬스터와 전투 시스템이 모두 추가되었습니다.

 

이번 프로젝트는 처음부터 새로 다시 만드는 것이 아닌,

 

제 프로젝트를 총원 4명이서 협업하는 형식으로 시작되었습니다.

 


 

여기서 싱글톤 패턴 디자인을 왜 언급하냐면

 

 

제 코드는 여러모로 하드 코딩된 상태로 static으로 구현된 것들이 매우 많습니다.

 

 

그렇기에 먼저 옵션 및 핵심 기능을 잡아줄 중추 스크립트가 필요했습니다.

 

 

그래서 GameManager를 중심으르 잡아서 싱글톤 패턴으로 구현을 했습니다.

 

 

그 후 DataManager, UIManager, EventManager, Player를 GameManager에 연계하여

 

 

언제든지 쉽게 접근할 수 있도록 구현했습니다.

 

        private static GameManager instance = null;
        private static readonly object padLock = new object();

        GameManager()
        {

        }

        public static GameManager Instance
        {
            get
            {
                lock (padLock)
                {
                    if(instance == null)
                    {
                        instance = new GameManager();
                    }
                }
                return instance;
            }
        }

        private DataManager data = new DataManager();
        private UIManager ui = new UIManager();
        private EventManager _event = new EventManager();
        private Player player = new Player();

        public DataManager Data { get => Instance.data; }
        public UIManager UI { get => Instance.ui; }
        public EventManager Event { get => Instance._event; }
        public Player Player { get => Instance.player; }

 

 

또한 Main 함수가 있던 Program.cs의 코드를 최소화하기 위해서

 

 

GameManager.cs에 GameStart()라는 함수를 만들고,

 

 

내부에 있던 while문을 제거한 후 재귀함수로 만들었습니다.

 

        static void Main(string[] args)
        {
            // 거슬리는 커서의 움직임을 없애기 위해서 Visible을 False로
            Console.CursorVisible = false;

            GameManager.Instance.GameStart();
        }

 

 

이렇게 해서 600 Line이 넘던 Program.cs을 20줄 미만으로 줄일 수 있습니다.

 

 

또한 GameManager.Instance... 형식으로 객체 생성자를 만들지 않고도 참조할 수 있어서

 

매우 편리합니다.

 

단, 단점이 있습니다.

 

 

 


위와 같은 싱글톤의 단점


하나의 인스턴스 내에서 모든 기능을 다루고 있기 때문에,

 

만약 해당 인스턴스가 에러가 나거나 망가질 경우,

 

시스템이 고장날 수 있기 때문에,

 

싱글톤 내부 자체에서 예외 처리를 통해서 회복성, 유지성을 만들어줘야합니다.

 

 


오늘의 회고

 

오늘은 팀 활동으로 인해서 많은 소통을 나눴고,

 

이로 인해, 코드 컨벤션, 깃 커밋 컨벤션, 깃 플로우 컨벤션 등을

 

피그마를 통해서 도형을 그려가면서 만들어갔습니다.  

 

 

 

완벽하지는 않지만 협업의 중요성, 소통, 그리고 팀과의 약속을 정하는 것 또한,

 

작업의 효율성 등을 높이는 데에 큰 도움이 되는 것 같습니다.

 

다음 포스팅은 깃 커밋 컨벤션, 깃 플로우 컨벤션에 대해서 포스트 해볼까합니다.

'프로그래밍 노트 > TIL' 카테고리의 다른 글

내일배움캠프 12일차 TIL  (1) 2024.05.01
내일배움캠프 11일차 TIL  (0) 2024.04.30
내일배움캠프 9일차 WIL  (1) 2024.04.26
내일배움캠프 8일차 TIL  (1) 2024.04.25
내일배움캠프 7일차 TIL  (0) 2024.04.24