[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]}");
        }
    }
}

image

즉, ?.가 참이면 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"}");
        }
    }
}

image

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




© 2022. by KSC

Powered by sora