연산자 오버로드(C# 및 Java)

업데이트: 2007년 11월

C++와 마찬가지로 C#을 사용하면 고유한 클래스에 사용하기 위한 연산자를 오버로드할 수 있습니다. 이렇게 하면 사용자 정의 데이터 형식을 자연스럽게 표시할 수 있고 기본 데이터 형식처럼 논리적으로 사용할 수 있습니다. 예를 들어, 복소수를 나타내기 위한 ComplexNumber라는 새로운 데이터 형식을 만들고 두 개의 복소수를 더하기 위해 + 연산자를 사용하는 경우와 같이 표준 산술 연산자를 사용하여 이러한 숫자에 대한 수학 연산을 수행하는 메서드를 제공할 수 있습니다.

연산자를 오버로드하려면 연산자 이름 뒤에 오버로드할 연산자의 기호를 추가하여 함수를 작성합니다. 예를 들어, 다음 예제에서는 + 연산자를 오버로드합니다.

public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)

모든 연산자 오버로드는 클래스의 정적 메서드입니다. 또한 등호 연산자(==)를 오버로드하는 경우에는 부등호 연산자(!=)도 함께 오버로드해야 한다는 사실에 주의할 필요가 있습니다. 또한 < 및 > 연산자와 <= 및 >= 연산자는 쌍으로 오버로드해야 합니다.

오버로드할 수 있는 연산자의 전체 목록은 다음과 같습니다.

  • 단항 연산자: +, -, !, ~, ++, --, true, false

  • 이항 연산자: +, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=

다음 코드 예제에서는 + 및 - 연산자를 오버로드하는 ComplexNumber 클래스를 만듭니다.

public class ComplexNumber
{
    private int real;
    private int imaginary;

    public ComplexNumber() : this(0, 0)  // constructor
    {
    }

    public ComplexNumber(int r, int i)  // constructor
    {
        real = r;
        imaginary = i;
    }

    // Override ToString() to display a complex number in the traditional format:
    public override string ToString()
    {
        return(System.String.Format("{0} + {1}i", real, imaginary));
    }

    // Overloading '+' operator:
    public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
    {
        return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
    }

    // Overloading '-' operator:
    public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)
    {
        return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
    }
}

이 클래스를 사용하면 다음과 같은 코드로 두 개의 복소수를 만들고 조작할 수 있습니다.

class TestComplexNumber
{
    static void Main()
    {
        ComplexNumber a = new ComplexNumber(10, 12);
        ComplexNumber b = new ComplexNumber(8, 9);

        System.Console.WriteLine("Complex Number a = {0}", a.ToString());
        System.Console.WriteLine("Complex Number b = {0}", b.ToString());

        ComplexNumber sum = a + b;
        System.Console.WriteLine("Complex Number sum = {0}", sum.ToString());

        ComplexNumber difference = a - b;
        System.Console.WriteLine("Complex Number difference = {0}", difference.ToString());
    }
}

이 프로그램에서 알 수 있듯이 ComplexNumber 클래스에 속한 개체에 대해 더하기 및 빼기 연산자를 거의 직관적으로 사용할 수 있습니다. 다음은 코드를 실행한 출력 결과입니다.

Complex Number a = 10 + 12i

Complex Number b = 8 + 9i

Complex Number sum = 18 + 21i

Complex Number difference = 2 + 3i

Java에서는 문자열 연결을 위해 + 연산자를 내부적으로 오버로드하기는 하지만 연산자 오버로드를 지원하지 않습니다.

참고 항목

작업

연산자 오버로드 샘플

개념

C# 프로그래밍 가이드

참조

오버로드할 수 있는 연산자(C# 프로그래밍 가이드)

기타 리소스

Java 개발자를 위한 C# 프로그래밍 언어