[c++] 클래스 멤버 함수와 전역 함수를 이용한 연산자 오버로딩

C++에서는 특정 연산자의 동작을 사용자가 원하는 대로 재정의할 수 있습니다. 이를 연산자 오버로딩(Operator overloading)이라고 합니다. 클래스 멤버 함수와 전역 함수 각각을 이용하여 연산자를 오버로딩할 수 있습니다. 이 글에서는 클래스 멤버 함수와 전역 함수를 이용하여 연산자 오버로딩을 구현하는 방법을 살펴보겠습니다.

클래스 멤버 함수를 이용한 연산자 오버로딩

클래스 멤버 함수를 이용하여 연산자를 오버로딩하는 방법은 다음과 같습니다. 예를 들어, + 연산자를 오버로딩하여 두 개의 객체를 더하는 기능을 구현해보겠습니다.

class MyVector {
private:
    int x, y;
public:
    MyVector(int x, int y) : x(x), y(y) {}
    MyVector operator+(const MyVector& vec) {
        return MyVector(this->x + vec.x, this->y + vec.y);
    }
};

위 코드에서 operator+ 함수는 + 연산자를 오버로딩한 것입니다. 이제 + 연산자를 이용해 MyVector 객체를 더할 수 있게 되었습니다.

전역 함수를 이용한 연산자 오버로딩

전역 함수를 이용하여 연산자를 오버로딩하는 방법은 다음과 같습니다. 위와 동일한 예제를 전역 함수를 이용하여 구현하겠습니다.

class MyVector {
private:
    int x, y;
public:
    MyVector(int x, int y) : x(x), y(y) {}
    friend MyVector operator+(const MyVector& vec1, const MyVector& vec2) {
        return MyVector(vec1.x + vec2.x, vec1.y + vec2.y);
    }
};

이제 operator+ 함수가 MyVector 클래스의 friend 함수로 선언되어 있습니다. 이제 + 연산자를 이용해 MyVector 객체를 더할 수 있게 되었습니다.

결론

C++에서는 클래스 멤버 함수와 전역 함수를 이용하여 연산자 오버로딩을 구현할 수 있습니다. 두 방법은 각각 장단점이 있으며 적합한 상황에 따라 선택하여 사용할 수 있습니다.

이러한 연산자 오버로딩은 코드를 직관적으로 만들어주고, 객체 지향적인 설계를 할 수 있도록 도와줍니다. 따라서 적절히 사용함으로써 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

참고 자료

  1. cplusplus.com - Operator Overloading
  2. GeeksforGeeks - Operator Overloading in C++