(C#)삼항연산자, ?연산자, ??연산자

장장·2025년 9월 22일

1. 삼항연산자

  • () 안의 조건이 맞는지 체크, 맞으면 왼쪽 틀리면 오른쪽 반환

    int a = 10;
    bool diff = (a > 5) ? true :false; //diff는 true

  • 삼항연산자를 클래스의 생성자에 써서 이렇게 표현 가능

class mCharacter
{
    public Weapon wpn;
    public string Name = "Ingrid";
    
    public int? lvl;
	public mCharacter(string name)
	{
    	Name = (name == "") ? "미기입" : name;
    	wpn = (wpn == null) ? new Weapon() : wpn;
    	lvl = (lvl == null) ? 1 : lvl;
	}
}

2. ? 연산자 (Null 조건부 연산자)

  • 객체가 null이라면 ?.의 오른쪽 행동을 하지않음
class Car
{
    public void Drive()
    {
        Console.WriteLine("Car Drive");
    }
}
static void Main(string[] args)
{
    Car car = null;
    car?.Drive(); //car 객체가 null인데 에러 안남 (실행은 안됨)
}

??연산자 (Null 병합 연산자)

  • ?? 좌측에있는 참조형이 만약 null이 아니면 좌측의 내용 실행
  • null이면 ?? 우측에 있는 내용 실행

int? aa = null;
Console.WriteLine(aa ?? 124); //124 출력.

코드

class Weapon 
{
    public string Name = null;
}
class mCharacter
{
    public Weapon wpn;
    public string Name = "Ingrid";
    
    public int? lvl;

    //삼향연산자를 이렇게 쓸 수 있다.
    public mCharacter(string name)
    {
        wpn = new Weapon();
        wpn.Name = name;
    }
    public mCharacter()
    {
        wpn = new Weapon();
    }
}
static void Main(string[] args)
{
    //1. 삼향연산자 
    int toDetermine = 10;
    bool isBiggerthan5;

    //삼항연산자 사용
    isBiggerthan5 = (toDetermine > 5) ? true : false;

    //삼향연산자 예시 (생성자가 잘못기입되었으면 처리)
    mCharacter mChar = new mCharacter("Mage");

    //삼항 연산자 안쓰면 코드가 너무 길어짐
    if (toDetermine > 5)
    {
        isBiggerthan5 = true;
    }
    else
    {
        isBiggerthan5 = false;
    }
    //2. ? 연산자
    mCharacter mChar2 = null;
    Console.WriteLine(mChar2?.Name); //
    Console.WriteLine(mChar2?.wpn?.Name); //출력없음. wpn이 비어있기때문에

    //3. ?? 연산자
    mCharacter[] myTroop = new mCharacter[4];
    myTroop[0] = new mCharacter();
    myTroop[1] = new mCharacter("찰");
    myTroop[2] = new mCharacter();
    myTroop[3] = new mCharacter("칼");

    //??연산자는
    //??기준, 좌측에있는 참조형이 만약 null이라면 ??의 우측 내용치 실행
    //null이 아니라면 ??기준 좌측에 있는 내용을 그대로 사용
    int? aa = null;
    Console.WriteLine(aa ?? 124); //124 출력. aa가 null이기때문에
    foreach (var mych in myTroop)
    {

        //Console.WriteLine(mych.wpn.Name.ToString()); //에러
        Console.WriteLine(mych.wpn.Name?.ToString()); //?연산자 써도 가능
        //Console.WriteLine(mych.wpn.Name ?? "무기가 저장되지 않았습니다"); 
    }

0개의 댓글