-
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배는 올라갈 거예요
반응형'개발 > C#' 카테고리의 다른 글
C# 비동기 프로그래밍(async/await) (1) 2026.01.14 C# 문자열 합치기, 아직도 + 연산자만 쓰시나요? (String vs StringBuilder) (0) 2026.01.13 C# 초보자가 가장 많이 하는 실수: List 사용법 (0) 2026.01.12 C# Windows Form [2] UI 속성 사용법 (2) 2024.01.10 C# Windows Form [1] 윈폼 개발시작하기 (1) 2024.01.09