본문 바로가기
개발/C#

C# - Nullable 에 대해서(변수타입 뒤에 물음표)

by E-nan 2020. 4. 7.
728x90
반응형

 

안녕하세요. E-nan 입니다.

 

 

구글링을 하던중 다른사람이 쓴 코드에서 변수타입 뒤에 ? 가 붙은 변수를 본적이 있습니다.

 

 

그림1) 변수타입뒤 물음표

 

이게 뭐지..? 하고 구글에 "? 연산자"를 검색했더니 제대로 결과가 나오지 않아서 한참을 헤맸던 기억이..

 

어찌저찌 열심히 구글링을 하다가 Stack Overflow에서 어떤 외국인도 저와 같은 고민을 가지고 질문을 하셨더군요..

(어떻게 찾았는지 기억도 잘 안납니다 ㅠㅠ)

 

결론부터 말씀드리자면!!

변수타입 뒤에 ?를 붙인 변수는 Nullable 변수 즉, Null값이 허용된 변수라는 뜻입니다.

 

일반적인 변수는 Null값이 아닌 임의의 값을 반드시 가지고 있어야 합니다.

예를들어 bool 변수에는 true와 false 두가지의 값만 할당할 수 있습니다.

 

하지만, 변수타입 뒤에 ?를 붙인 bool? 변수는 true, false, null 이렇게 세가지의 값을 할당할 수 있습니다.

 

 

 

그림2) bool, bool?

 

그렇다면, 

이 두개의 bool 변수는 같을까요? 다를까요?

 

 

 

그림3) bool = bool? OR bool = bool?

 

 

보시는 것처럼 twoBool을 oneBool에 대입하려고 하니 빨간 밑줄이 생겼네요.

oneBool을 twoBool에 대입하는건 문제없이 잘 되는것 같습니다.

 

왜 밑줄이 생겼는지 눈치채셨나요?

 

oneBool은 일반 bool 변수지만, twoBool은 Null값이 들어갈 수 있는 Nullable변수이기 때문에

oneBool변수에는 Null값이 들어갈 수 없으니, 밑줄이 생겼습니다.

 

그렇다면 twoBool값을 oneBool에 할당하려면 어떻게 해야 할까요??

 

 

그림4) Convert.ToBoolean

 

이렇게 Convert를 이용하면 정상적으로 실행이 됩니다.

 

이쯤에서 궁금증이 생기지 않나요??

oneBool에는 Null값이 들어갈 수 없는데 이렇게 하면 어떤 결과가 나올까요??

 

 

그림5) oneBool = Convert.ToBoolean(twoBool)

 

테스트를 위해 간단한 코드를 작성해보았습니다.

 

 

 

그림6) True? False? Null?

 

 

Null값인 twoBool을 컨버트시켜 oneBool에 할당하면 False가 나오는군요.

 

오타나 잘못된 부분 및 궁금하신 점은 댓글로 남겨주세요!

 

728x90
반응형

댓글