[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++에서는 클래스 멤버 함수와 전역 함수를 이용하여 연산자 오버로딩을 구현할 수 있습니다. 두 방법은 각각 장단점이 있으며 적합한 상황에 따라 선택하여 사용할 수 있습니다.
이러한 연산자 오버로딩은 코드를 직관적으로 만들어주고, 객체 지향적인 설계를 할 수 있도록 도와줍니다. 따라서 적절히 사용함으로써 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.