Unity

Unity에서 static 한정자란?

anvil925 2025. 5. 12. 22:29
728x90
반응형

Unity에서 static 한정자란?

Unity를 이용한 게임 개발에서 static 키워드는 자주 사용되며, 자칫 잘못 사용하면 예상하지 못한 버그로 이어질 수 있기 때문에 정확한 개념 이해가 매우 중요합니다. 이번 글에서는 Unity C# 환경에서 static의 개념과 특징, 주의점에 대해 다뤄보겠습니다.


static 키워드란?

C#에서 static은 클래스나 멤버가 인스턴스가 아닌 클래스 자체에 속함을 의미합니다. 즉, static으로 선언된 필드나 메서드는 객체를 생성하지 않고도 접근할 수 있습니다.

public static class GameManager {
    public static int score = 0;

    public static void ResetScore() {
        score = 0;
    }
}

위 예제처럼, GameManager 클래스의 score ResetScore()는 객체 생성 없이 바로 접근할 수 있습니다.

GameManager.score = 100;
GameManager.ResetScore();

static 변수 vs 인스턴스 변수

구분static 변수인스턴스 변수

소속 클래스 인스턴스
메모리 프로그램 시작 시 단 한 번 생성 인스턴스마다 별도로 존재
접근 방식 클래스명.변수명 인스턴스명.변수명
예시 GameManager.score enemy.health

MonoBehaviour와 static

Unity에서 MonoBehaviour를 상속받은 클래스는 보통 인스턴스 기반으로 동작합니다. 따라서 static 변수나 메서드에는 Unity 이벤트 함수 (Start(), Update())를 사용할 수 없습니다.

public class GameManager : MonoBehaviour {
    public static int score;

    void Start() {
        score = 0; // 가능
    }
}

단, GameObject에 붙는 컴포넌트 자체는 static으로 선언하면 안 됩니다. 컴포넌트는 인스턴스 기반이기 때문입니다.


static과 싱글톤 패턴

게임에서 흔히 GameManager, AudioManager 같은 매니저 클래스에 싱글톤 패턴을 적용할 때 static을 사용합니다.

public class GameManager : MonoBehaviour {
    public static GameManager Instance { get; private set; }

    void Awake() {
        if (Instance == null) {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        } else {
            Destroy(gameObject);
        }
    }
}

싱글톤은 전역에서 접근할 수 있는 유일한 인스턴스를 보장할 때 매우 유용합니다.


static 사용 시 주의점

  • 테스트 및 유지보수가 어려워질 수 있음: 어디서든 접근이 가능하기 때문에 디버깅이 힘들어질 수 있음
  • 의존성이 강해짐: 구조가 단단하게 얽혀서 확장이나 변경이 어려워짐
  • 메모리 관리에 주의: 프로그램 종료 시까지 유지됨 (GC가 회수하지 않음)

static은 매우 강력한 기능이지만, 무분별하게 사용할 경우 코드 품질을 떨어뜨릴 수 있습니다. 전역적으로 공유할 필요가 있는 데이터나 유틸리티 함수 등에 한정해서 사용하는 것이 좋습니다. Unity에서는 특히 싱글톤 패턴과 함께 자주 활용되며, 그 특성과 위험성을 이해하고 사용하는 것이 중요합니다.


Unity에서 static을 제대로 이해하고 사용하면 개발 효율이 높아질 수 있습니다. 하지만 언제나 그렇듯, '필요한 곳에 적절히 사용하는 것'이 가장 중요함

728x90
반응형