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 == 0 ) //참
Console.WriteLine("zero"); //출력
else //거짓
Console.WriteLine("not zero");
|
cs |
항상 변수나 객체를 선언할 때 null이 참조되지 않도록 하는 습관이 중요하고 혹시라도 null에 가능성이 있다면 변수나 객체 선언을 할 때 ? 연산자를 사용하고 사용할때에는 if문으로 null값인지 검사하는 코드를 넣는 습관을 들이자.
'닷넷,C#,.NET' 카테고리의 다른 글
C#/.NET Parse, TryParse로 String을 int,double,DateTime 타입으로 형변환 시키기 (0) | 2018.04.17 |
---|---|
C# 6.0, 7.0 새로운 기능들 소개 사이트 (0) | 2018.04.16 |
C#/.NET double(부동소수점)와 decimal(고정소수점) 차이 (4) | 2018.04.15 |
닷넷 네이티브(.NET Native)란 무엇인가? (0) | 2018.04.13 |
.NET Framework, .NET Core, Xamarin 차이와 공통점 (2) | 2018.04.13 |