본문 바로가기

프로그래밍/C#

[C#] 원시타입(primitive)에 Nullable 을 사용해보자

 



 

 

 

 

 

C# Prog.


 

 

처음으로 C#을 공부하면서 포스팅한 것이기에 다소 틀린 내용이 있을 수 있습니다. 그리고, 다른 언어를 알고 계시다는 가정하에 포스팅 하기때문에, 프로그래밍 언어를 처음 공부하시는 분은 다른 글도 참고하시길 바랍니다. 이 글은 <뇌를 자극하는 C# 4.0 프로그래밍>을 참고하였습니다.

 


 자바에서는 클래스에 속하는 변수를 사용하기 위해서는 변수를 초기화 해주는 작업이 필요합니다. 특히, 원시(primitive) 타입의 변수는 다음과 같이 null값을 넣어줄 수 없습니다. 쓰려면, 참조타입의 래퍼 클래스로 캐스팅 해줘야 합니다.

 

 

 

 하지만, C#에서는 자바에서 볼 수 없는 Nullable 형식을 지원하는데요? 이것을 지원해줌으로써 당당히(?) 비어있는 상태 즉, null 값을 가진 상태를 만들어 줄 수 있습니다.

 

 우선 형태는 보시는 바와 같이 타입뒤에 ?을 표기하도록 합니다.

데이터타입? 변수명


 그렇다면, C#도 자바처럼 간단한 테스트를 해봅시다.

 

위처럼 Nullable이 아닌 원시타입의 변수는 자바와 동일한 오류를 보여주는군요.

 

 정확한 것은 아니지만, 제 느낌은 이렇게 선언해줌으로써, 박싱(BOXING)을 수행하는 것 같습니다. 그냥 참고정도로만 해주세요.

 

 그리고 Nullable 타입은 다음과 같이 두가지 속성 HasValue 와 Value 를 지원합니다.

HasValue : 해당 변수에 값이 존재하는지에 대해서 TRUE 와 FALSE 값을 가지고 있습니다.

Value : 해당 변수의 값을 나타냅니다.

 

 그렇다면 한번 써봐야겠죠?

using System;


namespace Test
{
    class Test
    {
        static void Main(string[] args)
        {
            Console.WriteLine("---------testNull 변수에 null 값을 넣었습니다.---------");
            int? testNull = null;
            Console.WriteLine("testNull 변수는 값을 가지고 있습니까? " + testNull.HasValue);
            Console.WriteLine("testNull 변수가 가지고 있는 값은? " + testNull);

            Console.WriteLine("\n\n---------testNull 변수에 100이라는 값을 넣었습니다.---------");
            testNull = 100;
            Console.WriteLine("testNull 변수는 값을 가지고 있습니까? " + testNull.HasValue);
            Console.WriteLine("testNull 변수가 가지고 있는 값은? " + testNull.Value);
            Console.WriteLine("testNull 변수가 가지고 있는 값은? " + testNull);
        }
    }
}

 

 결과는 다음과 같습니다.

 

 

 

 상황에 따라서는 아주 유용할 수 있을 것 같은 타입니다. 사실 자바를 사용하면서 계속 의미없는 값으로 초기화해주려니 마음 한켠이 불편했거든요 ^^;;