본문 바로가기
C#

병합 할당 연산자(??=) 이해하기

by Oz Driver 2025. 4. 28.

 

??= 연산자는 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();
 

바꿔보세요.
훨씬 깔끔한 코드가 완성될 것입니다.