ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# NullReferenceException 해결법: "객체 참조가 개체의 인스턴스로 설정되지 않았습니다"
    개발/C# 2026. 1. 9. 12:13
    반응형

    C# 개발을 하다 보면 가장 많이, 그리고 가장 허탈하게 마주치는 에러가 바로 NullReferenceException입니다. 비주얼 스튜디오(Visual Studio)에서 아래와 같은 메시지를 보셨다면 제대로 찾아오셨습니다.

    System.NullReferenceException: '객체 참조가 개체의 인스턴스로 설정되지 않았습니다.'

     

    오늘은 이 에러가 왜 발생하는지, 그리고 캡처 화면 없이도 코드만으로 깔끔하게 해결하는 3가지 방법을 알아보겠습니다.

     

    1. 원인

    이 에러는 아주 단순합니다. "비어 있는(null) 상자를 열어서 내용물을 꺼내려 할 때" 발생합니다.

    메모리에 실제 객체(Instance)를 생성하지 않고, 이름표(Variable)만 붙여놓은 상태에서 그 객체의 속성이나 메서드에 접근하려고 하면 컴퓨터는 당황하며 에러를 뿜어냅니다.

     

    2. 에러가 발생하는 대표적인 상황 (Before)

    아래 코드에서 어디서 에러가 날까요?

    public class User
    {
        public string Name { get; set; }
    }
    
    public void PrintUserName()
    {
        User myUser = null; // 객체 생성을 하지 않음 (new User() 생략)
        
        // 여기서 NullReferenceException 발생
        Console.WriteLine(myUser.Name); 
    }

     

    myUser라는 변수는 선언했지만, 실제로 new User()를 통해 메모리를 할당하지 않았기 때문에 myUser.Name에 접근하는 순간 프로그램이 멈추게 됩니다.

     

     

    3. 해결 방법 (After)

    방법 1: 가장 확실한 '객체 생성'

    변수를 선언할 때 바로 인스턴스를 만들어주는 것이 가장 안전합니다.

    User myUser = new User(); // 인스턴스 할당
    myUser.Name = "Test_dev";
    Console.WriteLine(myUser.Name); // 정상 출력

     

     

    방법 2: 클래식한 'if문 체크'

    객체가 null인지 먼저 확인하고 로직을 실행하는 방법입니다.

    if (myUser != null)
    {
        Console.WriteLine(myUser.Name);
    }
    else
    {
        Console.WriteLine("정보가 없습니다.");
    }

     

     

    방법 3:  '?' 연산자 

    C# 6.0부터 도입된 **Null-conditional operator(?.)**를 사용하면 코드가 훨씬 간결해집니다.

    // myUser가 null이면 에러를 내지 않고 그냥 null을 반환합니다.
    string name = myUser?.Name;
    Console.WriteLine(name ?? "이름 없음"); // null이면 "이름 없음" 출력

     

     

     

     

     NullReferenceException은 초보자에게는 당혹스럽지만, 원리만 알면 가장 고치기 쉬운 에러이기도 합니다.

    위에서 알려드린 ?. 연산자만 잘 써도 코드의 안정성이 2배는 올라갈 거예요

    반응형
Designed by Tistory.