Microsoft MVP성태의 닷넷 이야기
Nullable에 대해서 [링크 복사], [링크+제목 복사],
조회: 14168
글쓴 사람
농상
홈페이지
첨부 파일
 
(연관된 글이 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 표현에 제약이 있는 것입니다.
정성태

... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
321셈토2/18/200610851SPOOL --> EMF --> TEXTOUT [1]
320정보문2/18/200610651파일의 최대 크기2 [1]
318정보문2/18/200611786파일의 최대 크기
319정성태2/18/200611811    답변글 [답변]: 파일의 최대 크기 [1]
317narc...2/17/200610932[IE embeded SmartClient]에서 닷넷 리모팅 프록시 사용시 처음 2분간 딜레이현상이 발생합니다. [1]
322narc...2/20/200611743    답변글 [답변]: 다시한번 부탁드리겠습니다..
316이경찬2/15/200613145MSDN 매거진 정기구독 신청은 어디서 할수있나요? [1]
315정준명2/15/200616613[DxFramework Lite] 분산 트랜잭션에 참여하는 동안 오류가 발생했습니다. [2]
314이윤희2/14/200610808엑셀변환시....그림을 넣을려면. [1]
313장강현2/14/200610983SmartClient 디버그 문제 [1]
312정보문2/13/200611062방법2006 [1]
309정보문2/10/200612166edit & continue [3]
308김용국2/11/200610647스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
310정성태2/11/200610149    답변글 [답변]: 스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
307narc...2/10/200611874IE Embeded 스마트클라이언트는 UserControl만 가능한가요? [2]
305정보문2/10/200612025웹 컨트롤
306정성태2/10/200611687    답변글 [답변]: 웹 컨트롤
303정보문2/10/200612575회원가입성공을 기념으로 질문 한 가지 던집니다.
304정성태2/10/200610981    답변글 [답변]: 회원가입성공을 기념으로 질문 한 가지 던집니다.
302김성2/7/200612138C#이나 VB.NET 으로 만든 것을 SETUP 해서 배포하려고 하는데요.. [1]
301참깨2/3/200616407개체가 이 속성 또는 메소드를 지원하지 않습니다. [1]
300김종욱2/2/200610762안녕하세요 [2]
299꼬부기1/19/200610056스마트클라이언트 관련 질문입니다... [2]
298정말초짜1/12/200610270smart client 질문입니다. [1]
296우승우1/4/20069915스마트클라이언트에서 COM+를 이용한 데이터 가져 오기..
297정성태1/4/200611869    답변글 [답변]: 스마트클라이언트에서 COM+를 이용한 데이터 가져 오기.. [2]
... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...