ArgumentNullException은 유효한 인수로 null을 허용하지 않는 메서드에 null 참조가 전달될 때 발생하는 예외입니다. C#에서 매개변수에 null 값이 들어갈 수 없는 상황에서 이를 사전에 차단하지 못하면 런타임 시점에 이 예외가 던져집니다.
발생 원인
주로 다음과 같은 경우에 ArgumentNullException이 발생합니다.
- null을 허용하지 않는 메서드의 매개변수에 null을 전달한 경우
- 문자열 파싱 함수(예:
int.Parse())에 null 문자열을 넘긴 경우 - API나 라이브러리 호출 시 필수 인수를 초기화하지 않고 사용한 경우
예제 코드
다음 예제에서는 int.Parse() 메서드에 null 문자열을 전달하여 ArgumentNullException이 발생하는 모습을 보여줍니다.
using System;
class Demo {
static void Main() {
string val = null;
int res = int.Parse(val); // 예외 발생
}
}
실행 결과
null 값을 전달했기 때문에 위 프로그램을 실행하면 컴파일 및 런타임 과정에서 다음과 같은 오류가 발생합니다.
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
ArgumentNullException 방지 방법
이러한 예외를 예방하려면 메서드에 인수를 전달하기 전에 반드시 null 여부를 검사해야 합니다.
- null 조건문 활용:
if (val == null)과 같은 조건문으로 미리 확인합니다. - ArgumentNullException.ThrowIfNull() 사용: .NET 6 이상에서는
ArgumentNullException.ThrowIfNull(val)을 호출해 명시적으로 검증할 수 있습니다. - int.TryParse() 활용: 파싱 실패 시 예외 대신 false를 반환하므로 안전하게 처리할 수 있습니다.
이처럼 입력값 검증을 습관화하면 ArgumentNullException으로 인한 런타임 오류를 효과적으로 줄일 수 있습니다.