본문 바로가기

[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL

10월 23일 금요일 본 캠프 개발 일지 | 유니티 숙련 강의 (1)

📌

 팀 프로젝트가 끝나고 개인 학습 주차가 돌아왔다. 수준별 학습 특강도 너무 유익했지만 개인 과제 끝낼 때까지는 따로 정리하지 않을 생각이다. 

학습 내용 

 

1. 싱글톤  


1. 싱글톤 

 본격적으로 3D 게임을 만들기 전에 확립하고 싶은 개념이 있었는데, 바로 싱글톤이다.
 붕어빵 틀로 만들어낸 한 개의 붕어빵, 다른 스크립트를 총괄해서 묶어주는 클래스 등 어렴풋한 지식은 있지만 뭔가 뚜렷하지 않았다. 그래서 팀 프로젝트를 할 때에도 개임매니저에서 싱글톤 패턴을 써놓고도 게임 매니저를 GetComponent로 불러와서 "왜 작동이 안 되지?" 이러고 있었다. ⩌ㅅ⩌

 특히 나는 전체 구조틀을 짜는 게 어렵기 때문에 확실히 정리해야 할 필요가 있다. 다음에는 인터페이스도 꼬옥.  

 

✅싱글톤? 

게임을 만들다보면 스크립트가 끝도 없이 많아진다. 이때 A 클래스가 B 클래스를 동적으로 참조하려고 하면 B 클래스를 인스턴스로 생성해야 한다. 하지만 A 뿐만 아니라 C, D, E 클래스에서도 B 클래스를 인스턴스로 생성하면 코드가 복잡해지고 오류가 나기 쉽다. B 클래스라는 틀에서 B 클래스를 수십 개 찍어내는 것보다 B 클래스를 딱 하나만 만들어서 공유해서 쓰는 게 좋지 않을까? 
 그게 바로 싱글톤! 딱 하나의 인스턴스만 만들어서 전역 접근이 가능하도록 하는 것. 동적/정적 클래스를 이해하고 인스턴스를 직접 생성해본다면 이게 얼마나 편리한 기능인지 알 수 있다. 

✅싱글톤은 어떻게 만들까? 

public class GameManager
{
    // static 인스턴스, 클래스 차원에서 하나만 존재
    private static GameManager _instance;
    // GameManager 인스턴스에 전역적으로 접근할 수 있는 프로퍼티
    public static GameManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new GameManager();
            }
            return _instance;
        }
    }

 

[1] 먼저 외부에서 직접 클래스를 인스턴스화 하는 것을 막기 위해  private로 GameManager을 생성한다. 

[2] 인스턴스에 전역적으로 접근할 수 있는 프로퍼티를 만든다.

 

✅사용하는 방법

void Start()
{
    // GameManager 싱글톤 인스턴스에 접근하고, 메서드 호출
    GameManager.Instance.DisplayStatus();
}

 

GameManager.Instance를 호출해 다른 클래스에서 자유롭게 사용한다. 따로 필드에 무언가를 선언해줄 필요도 없다. 


 

 내배캠을 진행하면서 느끼는 점: 아무리 설명을 반복해서 들어도 직접 코드를 짜보고 실패하고 찾아보는 과정이 있어야 확실히 개념이 잡히면서 응용까지 이어진다! 
 오늘은 하루종일 몸 상태가 나빠서 강의를 많이 듣지 못 했다. 일찍 자고 내일 아침에는 재경 튜터님께 질문한  GetComponent 부분을 정리해봐야겠다.