??= 연산자는 C#에서 null 병합 할당 연산자라고 부릅니다.
C# 8.0 버전부터 추가된 기능으로, 코드를 훨씬 더 간결하게 만들어줍니다.
간단히 말하면, 변수가 null이면 값을 할당하고, null이 아니면 아무것도 하지 않는다.
이것이 핵심입니다.
이전에는 어떻게 썼나요?
??= 연산자가 없던 시절에는 이렇게 직접 null 체크를 해야 했습니다.
if (legsTipActive == null)
{
legsTipActive = new List<bool>();
}
이 방식도 물론 잘 작동하지만, 간단한 동작을 위해 3줄이나 써야 했습니다.
지금은 어떻게 바뀌었나요?
이제 ??= 연산자를 사용하면 한 줄로 같은 작업을 끝낼 수 있습니다.
legsTipActive ??= new List<bool>();
짧고, 깔끔하고, 읽기도 쉽습니다.
실전 예시
실제 상황을 하나 살펴보겠습니다.
static 리스트를 필요할 때만 초기화하고 싶다면 이렇게 쓸 수 있습니다.
public static List<bool> legsTipActive;
void Awake()
{
legsTipActive ??= new List<bool>();
}
* legsTipActive가 이미 생성되어 있다면 아무 일도 일어나지 않습니다.
* 만약 null이라면 새로운 List<bool>이 만들어집니다.
정말 간단하면서도 안전한 방식입니다.
어디에 사용하면 좋을까요?
??= 연산자는 특히 이런 경우에 유용합니다.
* 싱글톤 인스턴스 초기화할 때
* 데이터 구조를 지연 초기화(lazy loading)할 때
* 컬렉션을 사용하기 전에 항상 준비 상태로 만들어야 할 때
* 기존 값을 덮어쓰지 않고 기본값만 세팅하고 싶을 때
싱글톤 패턴에 적용한 예시
private static GameData _instance;
public static GameData Instance
{
get
{
_instance ??= FindObjectOfType<GameData>();
return _instance;
}
}
이렇게 하면 필요한 순간에만 GameData를 찾아서 할당하게 됩니다.
마무리
* ??= 는 변수가 null인지 확인하고 필요할 때만 값을 할당하는 연산자입니다.
* 기존에 3~4줄로 작성하던 null 체크 + 할당 코드를 단 한 줄로 줄여줍니다.
* 리스트, 딕셔너리, 싱글톤 인스턴스 등을 초기화할 때 특히 유용합니다.
앞으로 코드에서 이런 패턴을 발견하면,
if (something == null)
{
something = new Something();
}
이렇게 쓰지 말고, 한 줄로 간결하게!
something ??= new Something();
바꿔보세요.
훨씬 깔끔한 코드가 완성될 것입니다.
'C#' 카테고리의 다른 글
Unity 에서 Singleton 클래스에 Instance로 접근하는 이유 (0) | 2025.04.30 |
---|---|
속성은 컴파일 단계에서 변수를 자동 생성합니다 (0) | 2025.04.28 |
Enum을 활용한 Dictionary 이해하기 (0) | 2025.04.28 |
대리자를 이용한 FSM 만들기 (0) | 2025.04.24 |
delegate 를 더 간결하게 선언하는 방법 (0) | 2025.04.23 |