Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 연산자 함수란? 연산자 오버로딩 개념과 예제

연산자 함수(Operator Function)는 오버로드된 연산자를 의미하며, 특수한 이름을 가진 함수입니다. 연산자 함수를 정의할 때는 operator 키워드 뒤에 정의하려는 연산자 기호를 붙여 선언합니다.

일반적인 함수와 마찬가지로, 오버로드된 연산자도 반환 타입과 매개변수 목록을 가집니다.

예를 들어 다음과 같습니다.

public static Box operator+ (Vehicle v1, Vehicle v2, Vehicle v3) {
}

아래 예제는 C#에서 연산자 함수를 생성하고 사용하는 방법을 보여주는 전체 코드입니다.

예제

using System;

namespace OperatorOvlApplication {
    class Box {
        private double length;   // 상자의 길이
        private double breadth;  // 상자의 너비
        private double height;   // 상자의 높이

        public double getVolume() {
            return length * breadth * height;
        }

        public void setLength(double len) {
            length = len;
        }

        public void setBreadth(double bre) {
            breadth = bre;
        }

        public void setHeight(double hei) {
            height = hei;
        }

        // 두 Box 객체를 더하기 위해 + 연산자를 오버로드합니다.
        public static Box operator+(Box b, Box c) {
            Box box = new Box();
            box.length = b.length + c.length;
            box.breadth = b.breadth + c.breadth;
            box.height = b.height + c.height;
            return box;
        }
    }

    class Tester {
        static void Main(string[] args) {
            Box Box1 = new Box();   // Box 타입의 Box1 선언
            Box Box2 = new Box();   // Box 타입의 Box2 선언
            Box Box3 = new Box();   // Box 타입의 Box3 선언
            double volume = 0.0;    // 상자의 부피를 저장하는 변수

            // box 1 사양 설정
            Box1.setLength(6.0);
            Box1.setBreadth(7.0);
            Box1.setHeight(5.0);

            // box 2 사양 설정
            Box2.setLength(12.0);
            Box2.setBreadth(13.0);
            Box2.setHeight(10.0);

            // box 1의 부피 계산
            volume = Box1.getVolume();
            Console.WriteLine("Volume of Box1 : {0}", volume);

            // box 2의 부피 계산
            volume = Box2.getVolume();
            Console.WriteLine("Volume of Box2 : {0}", volume);

            // 두 객체를 다음과 같이 더합니다:
            Box3 = Box1 + Box2;

            // box 3의 부피 계산
            volume = Box3.getVolume();
            Console.WriteLine("Volume of Box3 : {0}", volume);
            Console.ReadKey();
        }
    }
}

코드 설명

위 예제에서 operator+ 메서드는 public static으로 선언되었으며, 두 개의 Box 객체를 매개변수로 받습니다. 메서드 내부에서는 새로운 Box 객체를 생성한 뒤, 두 객체의 각 차원(길이, 너비, 높이)을 서로 더한 값을 새 객체에 할당하고 이를 반환합니다.

Main 메서드에서는 Box1 + Box2처럼 일반적인 덧셈 연산자를 그대로 사용해 두 객체를 더할 수 있습니다. 컴파일러는 이 표현식을 만나면 개발자가 정의한 operator+ 함수를 자동으로 호출합니다. 이것이 바로 C#에서 연산자 오버로딩이 동작하는 방식입니다.

실행 결과

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

Box3의 부피는 두 상자의 각 차원이 합쳐진 값(18 × 20 × 15)으로 계산되어 5400이 출력됩니다. 이처럼 연산자 함수를 활용하면 사용자 정의 타입에도 기본 타입처럼 직관적인 연산자를 적용할 수 있습니다.