[C#] 연산자 오버로딩

Flaming Bun·2025년 7월 24일

C#

목록 보기
30/35

참고 사이트 : https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/operator-overloading

🔥 연산자 오버로드

사용자 정의 형식이 미리 정의된 C# 연산자 (+, -, *, /, ...)의 동작을 직접 지정할 수 있는 기능이다.

분수의 덧셈같은 것을 구현할 때 사용한다.


연산자 선언 규칙

  • operator를 사용해서 연산자를 선언한다.

  • public으로 선언해야 한다.

  • static 한정자가 필요하다.

  • 단항 연산자, 이항 연산자의 하나 이상의 매개변수는 형식 T 또는 T?여야 한다.

  • C# 14부터 복합 할당 연산자(+=, -=) 및 인스턴스 ++/-- 연산자도 오버로드가 가능하다.


오버로드 가능한 연산자

종류예시비고
단항 연산자+x, -x, !x, ~x, ++, --++/--는 C# 14부터 인스턴스 방식 가능하다.
이항 연산자x + y, x - y, x * y, x / y, x % y
비교/같음==, !=, <, >, <=, >===/!=, <,> 및 <=,>=는 쌍으로 오버로드해야 한다
비트/시프트&, |, ^, <<, >>, >>>
복합 할당+=, -=, *=, /= 등C# 14 이상에서만 오버로드 가능, 반환형은 void이어야 한다.

예제 (분수 덧셈)

public struct Fraction
{
	private int numerator;
    private int denominator;
    
    public Fraction(int numerator, int denominator)
    {
    	if(denominator == 0)
        {
        	throw new ArgumentException("분모는 0이 될 수 없다.", nameof(denominator));
        }
        
        this.numerator = numerator;
        this.denominator  = denominator;
    }
    
    public static Fraction operator +(Fraction operand) => operand;
    public static Fraction operator -(Fraction operand) => new Fraction(-operand.numerator, operand.denominator);
    
    public static Fraction operator +(Fraction left, Fraction right) 
    => new Fraction(left.numerator * right.denominator + right.numerator * left.denominator, left.denominator * right.denominator );
}



public static class OperatorOverloading
{
	public static void Main()
    {
    	Fraction a = new Fraction(2, 3);
        Fraction b = new Fraction(1, 3);
        
        Console.WriteLine(a+b); // output : 9 / 9;
    }
}

0개의 댓글