[C#] x == null / x is null 차이
코딩 중 문득 궁금해져서 알아봤습니다. 변수 == null과 변수 is null의 차이점.
물론, string 뿐 아니라 다른 여러 객체에도 해당됩니다.
그럼 심각한 문제가 생기는 상황이란 뭘까요? 예상하신 분도 계시겠지만, 바로 Primitive type, Value type에 is null을 사용하는 상황입니다.
위의 예제는 원시 타입에 is null을 쓸 경우에 나타나는 에러 메세지이지만, Enum과 같은 값 타입에 is null을 쓸 때에도 마찬가지로 동일한 에러가 나타납니다.
물론, CS0037이란 이름에서 알 수 있듯 런타임 에러가 아니기 때문에, 빌드 전 미리 확인하고 대처할 수 있습니다.
객체끼리 비교한다는 가정 하에, 둘은 차이가 없다는 결론을 얻었습니다. 그러나 일부 상황에서는 심각한 차이가 발생합니다.
일단 차이가 없는 경우를 먼저 보여드리면, 객체끼리 비교하는 아래와 같은 상황입니다.
string a;
Console.WriteLine(a is null); // => true
Console.WriteLine(a == null); // => true
a = null;
Console.WriteLine(a is null); // => true
Console.WriteLine(a == null); // => true
물론, string 뿐 아니라 다른 여러 객체에도 해당됩니다.
그럼 심각한 문제가 생기는 상황이란 뭘까요? 예상하신 분도 계시겠지만, 바로 Primitive type, Value type에 is null을 사용하는 상황입니다.
int a;
Console.WriteLine(a == null); // => false
Console.WriteLine(a is null); // error CS0037: 'int'은(는) null을 허용하지 않는 값 형식이므로 null을 이 형식으로 변환할 수 없습니다.
위의 예제는 원시 타입에 is null을 쓸 경우에 나타나는 에러 메세지이지만, Enum과 같은 값 타입에 is null을 쓸 때에도 마찬가지로 동일한 에러가 나타납니다.
물론, CS0037이란 이름에서 알 수 있듯 런타임 에러가 아니기 때문에, 빌드 전 미리 확인하고 대처할 수 있습니다.
댓글
댓글 쓰기