[CS] 데이터를 가공하는 연산자
in CS
Null 조건부 연산자
널 조건부 연산자는 다음과 같이 물음표와 점으로 이루어져 있다. (?.) 널 조건부 연산자가 하는 일은 객체의 멤버에 접근하기 전에 해당 객체가 null인지를 검사하여 그 결과가 참(즉, 객체가 null)이면 그 결과로 null을 반환하고, 그렇지 않으면 . 뒤에 지정된 멤버를 반환한다. 예시를 보자.
== 연산자를 이용한 코드
class Foo
{
public int member;
}
Foo foo = null;
int? bar;
if(foo == null)
bar=null;
else
bar=foo.member;
?. 연산자를 이용한 코드
class Foo
{
public int member;
}
Foo foo = null;
int? bar;
bar = foo?.member;
?[]도 동일한 기능을 수행하는 연산자이다. 하지만 ?.과 다른점은 객체의 멤버 접근이 아닌 배열과 같은 컬렉션 객체의 첨자를 이영한 참조에 사용된다는 점이다. 예시 코드를 보자.
using System;
using System.Collections;
namespace ConsoleApp6
{
internal class Program
{
static void Main(string[] args)
{
ArrayList a = null;
a?.Add("야구"); // a?.가 null을 반환하므로 Add() 메소드는 호출 되지않음
a?.Add("축구");
Console.WriteLine($"Count : {a?.Count}"); // a?.가 null을 반환하므로 "Count : " 외에는 아무것도 출력안됨
Console.WriteLine($"{a?[0]}");
Console.WriteLine($"{a?[1]}");
a= new ArrayList(); // a는 이제 null이 아님
a?.Add("야구");
a?.Add("축구");
Console.WriteLine($"Count : {a?.Count}");
Console.WriteLine($"{a?[0]}");
Console.WriteLine($"{a?[1]}");
}
}
}

즉, ?.가 참이면 null을 반환하고, 거짓이면 . 뒤의 지정된 멤버를 반환한다.
Null 병합 연산자
Null 병합 연산자 ??는 Null 조건부 연산자처럼 프로그램에서 종종 필요한 변수/객체의 null검사를 간결하게 해준다. ??연산자는 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null인지 판단한다. 판단 결과가 null이 아니면 왼쪽 피연산자를 그대로 반환하고, 왼쪽 피연산자가 null이면 오른쪽 피연산자를 봔한한다. 예제를 보자.
using System;
using System.Collections;
namespace ConsoleApp6
{
internal class Program
{
static void Main(string[] args)
{
int? num = null;
Console.WriteLine($"{num ?? 0}"); // num이 null이기 때문에 0 반환
num = 99;
Console.WriteLine($"{num ?? 0}"); // num이 null이 아니기 때문에 num반환
string str = null;
Console.WriteLine($"{str ?? "Default"}");
str = "Specific";
Console.WriteLine($"{str ?? "Default"}");
}
}
}

즉, ??연산자 기준으로 왼쪽의 피연산자가 null이면 오른쪽 피연산자를 반환하고 왼쪽의 피연산자가 null이 아니면 왼쪽 피연산자를 반환한다.
