#삼항연산자 #연산자 재정의 #인덱서

sejun-Lee·2025년 3월 29일

삼항연산자 란?

  • 피연산자의 갯수가 3개인 조건부 연산자를 의미합니다.
  • if else 구문을 한줄로 간단하게 표현할 수 있기 때문에 인라인 if(inline-if)라고도 합니다.
  • if else 구문과 결과는 동일하지만 if else 구문은 여러줄로 작성되는 반면,
  • 삼항연산자를 사용하면 한줄로 간단하게 표현할 수 있기 때문에 소스가 간결해집니다. 
int left = 10;
int right = 20;


// 삼항 연산자
int bigger = left > right  ? left : right;  // left가 right 보다 크다면 left출력 아니면 right 출력
Console.WriteLine(bigger);

int abs = left >= 0 ? left : right;           // left가 0과 크거나 같다면 left출력 아니면 right 출력
Console.WriteLine(abs);

연산자 재정의 (Operator Overloading)

사용자정의 자료형이나 클래스의 연산자를 재정의하여 여러 의미로 사용

  • 기본연산자의 연산을 함수로 재정의하여 기능을 구현
  • 기본연산자를 호환하지 않는 사용자정의 자료형에 기본연산자 사용을 구현함
        public struct Position
        {
            public int x;
            public int y;

            public static Position operator +(Position left, Position right)
            {
                int x = left.x + right.x;
                int y = left.y + right.y;
                return new Position() { x=x, y=y };
            }
        }

        static void Main(string[] args)
        {
            Position pos1 = new Position() {x=1,y=2 };
            Position pos2 = new Position() {x=3,y=4 };

            Position sumPos = pos1 + pos2;  
        }

인덱서(Indexer) 정의

this[]를 속성으로 정의하여 클래스의 인스턴스에 인덱스 방식으로 접근 허용

public class IndexerArray
{
    private int[] array = new int[10];

    public int this[int index]
    {
        get
        {
            return array[index];
        }
        set
        {
            array[index] = value;
        }
    }
}

void Main1()
{
    IndexerArray array = new IndexerArray();

    // 인덱서를 통한 인덱스 접근
    array[5] = 20;      // this[] set 접근
    int i = array[5];   // this[] get 접근
}

인덱서(Indexer) 자료형

  • 인덱서는 다른 자료형 사용도 가능
  • 열거형을 통해 인덱서를 사용하는 경우도 빈번
public enum Parts { Head, Body, Feet, Hand, SIZE }
public class Equipment
{
    string[] parts = new string[(int)Parts.SIZE];

    public string this[Parts type]
    {
        get
        {
            return parts[(int)type];
        }
        set
        {
            parts[(int)type] = value;
        }
    }
}

void Main2()
{
    Equipment equipment = new Equipment();

    equipment[Parts.Head] = "낡은 헬멧";
    equipment[Parts.Feet] = "가죽 장화";

    Console.WriteLine($"착용하고 있는 신발 : {equipment[Parts.Feet]}");
}
profile
초보 개발자

0개의 댓글