Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# NullReferenceException(널 참조 예외)란? 발생 원인과 해결 방법

C# NullReferenceException(널 참조 예외)이란?

NullReferenceException은 C#에서 가장 자주 만나게 되는 런타임 예외 중 하나입니다. 이 예외는 값이 null인 객체의 멤버 필드나 메서드에 접근하려고 할 때 발생합니다. 즉, 실제 인스턴스가 존재하지 않는 참조 변수를 사용하려는 순간 런타임에서 오류를 던지게 됩니다.

예를 들어, 문자열 변수에 null을 할당한 뒤 해당 변수의 Length 속성에 접근하면 객체가 실제로 존재하지 않기 때문에 예외가 발생합니다.

예제 코드

아래 코드는 null인 문자열의 길이를 확인하려다 NullReferenceException이 발생하는 대표적인 사례입니다.

using System;

class Demo {
    static void Main() {
        string str = null;

        // str은 null이므로 Length 속성에 접근하는 순간 예외 발생
        if (str.Length > 0) {
            Console.WriteLine(str);
        }
    }
}

실행 결과

위 코드를 실행하면 다음과 같이 Unhandled Exception(처리되지 않은 예외) 형태로 프로그램이 비정상 종료됩니다. null을 가리키는 멤버에 접근했기 때문입니다.

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at Demo.Main () [0x00002] in <0bc5fbf292484d5194a19866ae5c2018>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Demo.Main () [0x00002] in <0bc5fbf292484d5194a19866ae5c2018>:0

NullReferenceException 예방 방법

이러한 오류를 방지하려면 객체를 사용하기 전에 반드시 null 여부를 확인해야 합니다.

1. 명시적인 null 검사

if (str != null && str.Length > 0) {
    Console.WriteLine(str);
}

2. null 조건부 연산자(?.) 사용

C# 6.0부터 도입된 ?. 연산자를 사용하면 참조가 null일 때 예외 대신 null을 반환합니다.

int? length = str?.Length;

3. null 병합 연산자(??) 활용

string result = str ?? "기본값";

이처럼 null 검사 습관과 안전한 연산자를 활용하면 NullReferenceException으로 인한 런타임 오류를 효과적으로 줄일 수 있습니다.