
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을 제대로 이해하고 사용하면 개발 효율이 높아질 수 있습니다. 하지만 언제나 그렇듯, '필요한 곳에 적절히 사용하는 것'이 가장 중요함
'Unity' 카테고리의 다른 글
| Unity에서 SOLID 원칙이란? (1) | 2025.05.13 |
|---|---|
| Unity에서의 접근제한자란? (1) | 2025.05.08 |
| Unity에서의 객체? 클래스? 생성자? (0) | 2025.05.07 |
| Unity에서의 Scroll기능 (0) | 2025.04.23 |
| Unity에서 IEnumerator와 Coroutine의 모든 것 (0) | 2025.04.21 |