Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!시작하기

Microsoft. NET 을 시작하는 분들을 위한 강좌입니다. 주로 기초적인 내용과 때론 기본적인 내용을 다룹니다

연산자 이야기 - ??

작성자 : 박종명
최초 작성일 : 2009-07-27 (월요일)
최종 수정일 : 2009-07-27 (월요일)
조회 수 : 3003

다음 글은 연산자 &,&& 그리고 |,|| 에 대해 나일수님이 정리해 주신 글입니다
나일수님의 닷넷, 특히 윈도우응용프로그램에 스킬과 열정을 가진 닷넷개발자이며 저의 가까운 지인이기도 합니다
---------------------------------------------------------------------------------------------------------------------------------------

닷넷 프레임웍 2.0 부터 널 허용 형식(Nullable Type)이란 타입이 나왔었다.
이것은 값형식(Value Type) 도 참조형식 처럼(Reference Type) null 을 할당 할 수 있는 값형식이다.

널 허용 형식에 대한 이야기는 범위를 벗어나기 때문에 생략하고 널 허용 형식에 대해 기본적 지식이 있다는
전제하에 글을 쓴다.

우선 널 허용 형식 변수에 보면 Value 라는 프로퍼티와 HasValue 라는 프로퍼티가 있다.
하나씩 살펴보면 HasValue 는 이 변수에 값이 있다면 true 를 null 이라면 false 를 리턴한다.
Value 는 이 변수의 값을 리턴한다.

예를 들어보자.

int? i = null;
int j;
j = i;

이 구문은 얼핏 봐도 에러가 예상된다.
int 형 변수 j 에 null 을 대입하려는 시도가 컴파일 타임 에러를 발생시킨다.

에러를 걷어내보자.

int? i = null;
int j;
if(i.HasValue)
      j = i.Value
else
      j = 0;

이제 안전해 졌다.

이 구문은 아래와 같이 3항연산자를 이용할 수도 있다.

int? i = null;
int j;
j = i.HasValue ? i.Value : 0;

이 구문은 아래와 같이 ?? 연산자를 이용할 수도 있다.

?? 연산자에 대해 알아보자.
null 허용 형식은 값을 포함하거나, 정의되지 않은 상태일 수 있다.

?? 연산자는 null 허용 형식(위 예에서 i)이 null을 허용하지 않는 형식(위 예에서 j)에 할당될 때 반환할
기본값을 정의한다. 사용 방식은  이렇다.

null을 허용하지 않는 형식 = null 허용 형식 ?? 기본값

이것은 널 허용 형식이 null 일 경우 기본값을 null 이, 아닐 경우 null 허용 형식이 가지고 있는 Value 를 대입한다.

위 예를 ?? 연산자로 바꿔보자.

int? i = null;
int j;
j = i  ?? 0;

구문이 한결 간결해 졌다.
사용방법이 어렵지도 않고 연산자의 의미만 잘 알고 있다면 굉장히 편리하게 사용할 수 있는 연산자 이다.

또한 ?? 연산자는 값형식 뿐만 아니라 참조형식에도 사용할 수 있다.
기억하는가? 위에서 살펴본 ?? 연산자의 정의를 말이다. 다시한번 살펴보자.

null을 허용하지 않는 형식 = null 허용 형식 ?? 기본값
(여기서 null 허용 형식이라 함은 nullable Type 도 해당 되지만 당연히 Reference Type 도 해당된다.)

string str = null;
string a;
a = str ?? "기본값";

여기쯤에서 참고로 알아둘 만한 리터럴 키워드가 있다.
default 가 그것인데 일단 다음을 살펴보자.

int? i = null;
int j;
j = i  ?? default(int);

뭔가 좀 이상하지 않은가? default 라는 키워드는 흔히 switch 문에서만 봐오던 것인데 이렇게도 쓰이다니 말이다.
이 또한 닷넷 프레임웍 2.0 부터 지원하는데 2.0 부터는 switch 문의 기본 레이블을 지정하는것 뿐만 아니라
제네릭 코드로 사용될 때는 형식 매개 변수의 기본값을 지정한다.
제네릭에 대한 이야기 또한 이 글의 주제에서 벗어나므로 사용방법만 알아두자.

default(Type) 을 쓰면 기본값은 Type 이 참조 형식의 경우 null이고 값 형식의 경우 0 이다.

여기까지 ?? 연산자에 대해 알아보았다.
연산자에 대한 의미를 확실히 알고 쓴다면 보다 간결한 코드를 작성할 수 있다.

이름
비밀번호
홈페이지
VO <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요