C#의 널 포인터 예외(NullReferenceException)란?
NullReferenceException은 Java 등 다른 언어의 NullPointerException에 해당하는 C#의 대표적인 런타임 예외입니다. 값이 null로 설정된 객체나 변수에 접근하려고 할 때 발생하며, 적절히 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.
try-catch를 활용한 예외 처리
C#에서는 try-catch 블록을 사용하여 NullReferenceException을 감지하고 처리할 수 있습니다. 아래 예제는 변수를 null로 설정한 후 출력을 시도하여 예외가 발생하고, 이를 catch 블록에서 잡아내는 과정을 보여줍니다.
try {
string a = null;
Console.WriteLine(a);
} catch (NullReferenceException ex) {
Console.WriteLine("변수가 null입니다!");
}
위 코드에서 try 블록 안에서 예외가 발생하면 프로그램 흐름이 즉시 catch 블록으로 이동합니다. 따라서 예외로 인해 프로그램이 중단되는 것을 방지하고, 개발자가 의도한 방식으로 오류 상황을 처리할 수 있습니다.
NullReferenceException의 주요 발생 원인
- null로 초기화된 객체의 메서드나 속성에 접근하는 경우
- 배열이나 컬렉션이 초기화되기 전에 요소에 접근하는 경우
- 메서드 매개변수로 null이 전달된 후 이를 검증 없이 사용하는 경우
- 객체 반환 메서드가 null을 반환했는데 이를 확인하지 않고 사용하는 경우
예외 방지를 위한 팁
예외 처리만큼 중요한 것은 사전에 예외 발생 자체를 막는 것입니다. 객체를 사용하기 전에 null 여부를 검사하거나, C# 6.0 이상에서 제공하는 null 조건 연산자(?.)를 활용하면 더욱 안전한 코드를 작성할 수 있습니다.
// null 검사를 통한 예방
if (a != null) {
Console.WriteLine(a);
}
// null 조건 연산자 사용
Console.WriteLine(a?.ToString() ?? "null 값입니다");