Microsoft MVP성태의 닷넷 이야기
Nullable에 대해서 [링크 복사], [링크+제목 복사],
조회: 16271
글쓴 사람
농상
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Nullable을 공부하다가 Nullable이 구조체로 구현되어 있다는 것을 보고 어떻게 null을 저장할 수 있는제 금금해졌습니다.
구조체라면 스택에 저장할 것이고 스택에는 null을 저장할 수 없다고 생각합니다.
그렇다면 추가로 null을 저장할 수 있는 메모리를 내부에 따로 설정해 놓는지도 궁금해져서 sizeof()로 크기를 구하려니 크기를 구할 수도 없습니다.
Nullable 변수의 값을 일반변수에 저장하거나 일반변수값을 Nullable 변수에 저장하는 경우 박싱이나 언박싱이 발생하는지도 모르겠습니다.
Nullable이 내부적으로 어떻게 처리가 되는지 궁금합니다.


[연관 글]






[최초 등록일: ]
[최종 수정일: 7/13/2019]


비밀번호

댓글 작성자
 



2019-07-16 06시02분
Nullable은 비록 구조체이긴 하지만 C#으로 직접 구현할 수 없는 부분이 있습니다. 즉, 내부적으로 CLR의 배려가 있어야만 가능한데요, 일례로 GetType을 호출했을 때 Nullable`1을 반환하지 않고 Nullable의 Value에 해당하는 Type을 반환합니다.

그래도 그런 특수한 부분을 제외한다면 비슷하게는 구현할 수 있는데, 우선 값을 담을 수 있는 제네릭 변수 하나와 그것에 값이 할당되었는지의 여부를 담고 있는 bool 변수 하나를 포함하면 됩니다. 당연히 값 형식으로 취급할 제네릭 변수는 null 값 지정은 안 되고, bool 변수에 따라 Nullable<T>.Value 속성이 null을 반환하거나, 값을 반환하는 식으로 구현하는 것입니다. 물론, 제네릭 타입의 Value이기 때문에 박싱/언박싱은 발생하지 않습니다.

참고로 "스택에는 null을 저장할 수 없다"는 것은 올바르지 않습니다. 스택이 아닌, 값 형식에 null을 저장할 수 없는 것입니다. null이라는 것이 0으로 값이 들어간 것이기 때문에 값 형식의 경우 0조차도 의미가 있으므로 null 표현에 제약이 있는 것입니다.
정성태

... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1536솔솔3/9/201519923mac address얻으려고 하는데요.. [1]
1535Stud...3/4/201520044C#엔 MFC의 theApp 과 같은 기능을 하는것이 없나요? [3]
1534김동진3/4/201519830C#에서 BHO로 Windows Explorer에서의 동작이 가능할지요 [2]
1533김동현3/3/201520082컴파일 된 프로그램에 코드 삽입(?) 관련입니다. [1]
1532반가워요3/3/201523317C# 소켓연결에 packet송수신... [8]
1531강현수3/2/201522509C# com 등록 시 GUID 변경 관련 문의 [1]
1529김민규2/15/201520903C++ 64bit/32bit [3]파일 다운로드1
1528김개똥2/14/201518284좀 관련없는 질문이지만, 정말 답답하고 찾는데 명확한 해답 찾지못해 질문 올립니다. <Windows 사용자 인증> [1]
1527방문자1/27/201520130System Timer의 Tick에서 Backgroundworker를 호출하면 스레드 문제가 있을까요? [1]
1526황상대1/26/201522072C# 마샬링 관련 질문이 있습니다. [1]
1525Ji-y...1/19/201521765시작하세요 C# 프로그래밍 도서에 관한 질문입니다. [1]
1523임종복12/31/201429900windows 2008 r2에서 ms-sql 2008 서버사용시 tls문제점 [3]
1524임종복1/4/201524331    답변글 [답변]: windows 2008 r2에서 ms-sql 2008 서버사용시 tls문제점 [2]
1521윤대욱12/19/201420468C++ 에서 서버와 클라이언트를 나누어서 구조체 전달에 대해서 궁금합니다. [1]파일 다운로드1
152012/10/201421344datetime관련해서요 [1]
1516aTo12/1/201420104wpf 배포관련. [3]
1514얄미운제리11/17/201420303[C# Mono]Mono Chart 개발 문의드립니다. [1]
1355미나리나물11/13/201417827RDP 접속 방식 질문드리고 싶습니다. [1]
1353송용국11/10/201417037TeamFoundationServer 에 소스를 Target서버로 옮기는(내려주는) 방법 있나요? [1]
1351blue...11/7/201422642c# webbrowser 모바일환경 접속 [1]
1350에메11/7/201422569WCF namedpipe 퍼블리싱 충돌 문제 [3]파일 다운로드1
1349Chun...11/6/201426353Microsoft. Net Framework 액세스 거부 오류...... [2]
1348김준석11/6/201422748 Mini dump 기록 안되는 현상 [2]파일 다운로드1
1346개미11/5/201437147https페이지에서 http서버에 있는 이미지 파일 호출시 보안 오류 [8]
1345장구니11/4/201421425AWS 인스턴스를 만들었는데 [1]
1343h11/2/201420869안녕하세요 [1]
... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...