[c++] 연산자 오버로딩을 통한 컨테이너 타입의 동작 정의

C++에서 연산자 오버로딩을 사용하면 사용자 정의 타입에 대한 연산을 정의할 수 있습니다. 이를 통해 사용자가 자체적으로 만든 컨테이너 타입(예: 벡터, 리스트, 맵 등)에 대해 산술 연산, 비교 연산 등을 수행할 수 있습니다.

연산자 오버로딩의 기본 개념

C++에서 연산자 오버로딩은 기존 연산자의 동작을 재정의하거나 새로운 연산자의 동작을 정의하는 것을 의미합니다. 이를 통해 사용자 정의 타입의 객체에 대한 연산을 지원할 수 있습니다.

컨테이너 타입의 동작 정의 예제

아래는 사용자가 만든 Vector 클래스를 예로 들어, 해당 클래스에 대한 + 연산자를 오버로딩하여 두 벡터의 요소를 더하는 동작을 정의한 예제 코드입니다.

#include <iostream>
#include <vector>

class Vector {
private:
    std::vector<int> elements;

public:
    Vector(std::initializer_list<int> list) : elements(list) {}

    Vector operator+(const Vector& other) const {
        Vector result = *this;
        for (size_t i = 0; i < elements.size(); ++i) {
            result.elements[i] += other.elements[i];
        }
        return result;
    }

    void print() const {
        for (int elem : elements) {
            std::cout << elem << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    Vector v1 = {1, 2, 3};
    Vector v2 = {4, 5, 6};
    Vector result = v1 + v2;
    result.print();
    return 0;
}

위의 예제 코드에서 + 연산자를 오버로딩하여 두 벡터의 각 요소를 더하는 동작을 정의했습니다. v1 + v2 연산은 두 벡터의 요소를 더한 결과를 반환하는데, 이때 Vector 클래스 내부에서 정의한 연산자 오버로딩 동작이 수행됩니다.

마무리

연산자 오버로딩을 통해 사용자 정의 컨테이너 타입에 대한 동작을 정의할 수 있습니다. 이를 통해 코드의 가독성을 높이고 사용자가 직관적으로 해당 타입을 다룰 수 있도록 도울 수 있습니다.

더 많은 정보를 원하시거나 질문이 있으시면 C++ 연산자 오버로딩에 대한 공식 문서를 참고하시기 바랍니다.