C#, 닷넷에서 변수에 값이 null 인지를 제대로 체크하지 않고 사용하면 NullReferenceException 예외가 발생할 수 있다. 생각보다 자주 발생하는 에러이다.

 

java에서도 nullpointerexception은 가장 쉽게 만나볼 수 있는 친근한 에러이다.

 

그래서 C#에서는 이를 잘 처리 할 수 있도록 다양한 문법들을 제공해주고 있다.

어려운 문법들도 있으나 아래의 예시정도만 정확히 알고 적재적소에 사용한다면 안정적인 코드를 작성할 수 있을 것이다.

 

우선 int나 double 과 같은 일반적인 변수에는 null을 대입할 수 없다.

그러나 아래 코드와 같이 변수 타입 뒤에 ? 를 붙이면 null값을 대입할 수 있다.

int? 와 같은 변수는 Nullable 타입이다. int? test2 는 컴파일 단계에서 Nullable<int> test2로 변경된다.

 

 

아래 코드와 같이 null값 뿐만 아니라 다른 데이터도 넣을 수 있다.

 

 

 

 

 

1
2
3
4
5
6
7
int? test2 = null//정상             
if(test2 == null//참
    Console.WriteLine("null");
 
test2 = 3;
if(test2 == 3//참
    Console.WriteLine(test2);
cs

 

변수의 필드나 속성을 구할때 null이 반환되는 경우도 있다. 이때 아래 코드와 같이 ?. 연산을 사용하여 처리하면된다. str이 null이라면 에러를 발생시키지 않고 null을 리턴하게 된다.

 

1
2
3
4
string str = null;
int? strLen = str?.Length; // int에 null 대입
if (strLen == null//참
    Console.WriteLine("null"); //출력
cs

 

 

위에 코드에서 해당 결과값이 null일때 null을 변수에 대입하는 대신 다른 값을 넣고 싶을 때는 ?? 연산자를 사용해서 아래 코드와 같이 사용하면 된다. str이 null이라면 에러를 발생시키지 않고 0을 대입하란 의미이다.

 

1
2
3
4
5
6
string str = null;
int strLen = str?.Length ?? 0//str이 null이면 0반환
if(strLen == //참
    Console.WriteLine("zero"); //출력
else  //거짓
    Console.WriteLine("not zero"); 
cs

 

항상 변수나 객체를 선언할 때 null이 참조되지 않도록 하는 습관이 중요하고 혹시라도 null에 가능성이 있다면 변수나 객체 선언을 할 때 ? 연산자를 사용하고 사용할때에는 if문으로 null값인지 검사하는 코드를 넣는 습관을 들이자.

 

Posted by 꿈만은공돌
,