널 조건 연산자란?

 널 조건 연산자는 c# 6.0부터 사용가능한 연산자로 변수의 null 체크를 할 수 있는 편리한 기능이다. 기존에는 특정 객체가 null값인 상태로 참조하려 할 때 NullReferenceException이 발생하는 상황을 막기 위해 변수마다 예외처리를 해야만 했다. 하지만 널 조건 연산자를 사용하면 같은 기능을 수행하면서 보다 편리하고 가독성 있는 코드를 작성할 수 있게된다.

 

널 조건 연산자 사용 방법

사용 방법은 다음과 같다.

public string testFunc(string temp)
{
	//temp가 null이라면 null 반환하고 아니라면 Replace 리턴 값 반환합니다.
	return temp?.Replace("-","");
}

특정 인덱스를 참조하는 경우에도 사용 가능하다.

public string testFunc(List<string> temp)
{
	//temp가 null이라면 nulll을 반환하고 아니라면 Replace() 리턴 값을 반환합니다.
	return temp?[0].Replace("-","");
}

 이 처럼 null 값을 체크하고자 하는 객체 뒤에 "?'를 붙여 예외처리가 가능하다. temp라는 변수가 null일 경우에는 "?" 뒤에 있는 동작을 더 이상 수행하지 않고 null을 반환하고 값이 있을 경우에는 그대로 동작을 수행함으로서 런타임중에 exception이 발생하지 않는다. if문을 사용하여 동일한 기능을 수행하기 위해서는 단순한 값 체크를 하는 코드가 길어지게 되기 때문에 코드의 전반적인 가독성이 하락하기 때문에 널 조건 연산자를 활용하면 많은 도움이 된다.

 

 하지만 "?" 연산자는 참조하려는 객체가 null일 경우에 오직 null만을 반환하기 때문에 반환 타입이 null 값을 받을 수 없는 타입이라면 이를 해결하기 위해 또 다시 불필요한 코드 작성을 해야한다. 예를 들면,

public bool testFunc(string temp)
{
	// 컴파일 에러
 	// 반환타입은 bool인데 널 조건 연산자는 null을 반환할 수도 있기때문
	return temp?.Equals("test");
}

 만약 위의 문제를 1차원적으로 해결한다면 아래와 같은 코드가 나올 것이다.

public bool testFunc(string temp)
{
	
    if(temp?.Equals("test") == null)
    {
    	return false;
    }
    else
    {
    	return true;
    }
}

 예외 처리에 대한 코드를 줄임으로서 코드의 가독성을 향상시키기 위해 널 조건 연산자를 사용하는 것인데, 위와 같이 해결하면 사용하는 의미가 없다. 하지만 C#에서는 이러한 상황을 해결하기 위한 또 다른 연산자 "??" 를 제공한다. 

 

 "??" 연산자는 "?" 연산자를 통해 나온 값이 null일 경우 원하는 값을 반환할 수 있도록 하는 연산자이다. "??" 연산자를 사용해 위의 문제를 해결하면 다음과 같다.

public bool testFunc(string temp)
{
	// "?" 연산자를 통해 null일 경우 false 값을 반환합니다.
	return temp?.Equals("test") ?? false;
}

 이 처럼 코드의 끝에 "??"를 사용하여 null일 경우 false를 반환 시켜 처음에 의도했던 기능을 다시 한 줄로 표현할 수 있다. 

 

 C#에서는 널 조건 연산자 뿐만 아니라 코딩을 위한 많은 편의기능이 존재하기 때문에 이를 잘 활용하면 개발 속도 뿐만 아니라 코드의 품질도 향상시킬 수 있다.

'프로그래밍 > C#' 카테고리의 다른 글

[C#] 컴포지트 패턴 (Composite Pattern)  (0) 2021.07.17
[C#] 싱글톤 패턴 (Singleton Pattern)  (0) 2021.06.12
[C#] 리플렉션 (Reflection)  (0) 2021.06.05