[C#] 5.1 캡슐화 대상(5.1.8 연산자 중복 정의)

C#에서는 클래스와 구조체의 멤버로 연산자 중복 정의를 캡슐화할 수 있습니다. 연산자 중복 정의를 하는 방법은 메서드와 비슷한데 static 키워드를 붙여 정적 멤버로 만들어야 하며 public으로 접근을 한정시키고 메서드 이름 대신 operator 키워드와 연산 기호를 명시한다는 점입니다.

그렇다고 모든 연산자를 중복 정의가 가능한 것은 아닙니다. 다음은 중복 정의가 가능한 것들입니다.

단항 연산자: +, -, !, ~, ++, —

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

▶ 연산자 중복 정의

class Man
{
    string name;
    public Man(string name)
    {
        this.name = name;
    }

    //== 연산자 중복 정의 (!= 연산자도 같이 중복 정의해야 함)
    public static bool operator == (Man man,string name)
    {
        return man.name == name;
    }

    //!= 연산자 중복 정의 (== 연산자도 같이 중복 정의해야 함)
    public static bool operator !=(Man man, string name)
    {
        return !(man == name);
    }
}

그리고 C#에서 비교 연산자를 중복 정의를 하려면 대응되는 연산자도 중복 정의해야 합니다. 즉, ==연산자를 중복 정의하려면 != 연산자도 중복 정의해야 한다는 것입니다. 이 외에 묵시적 형 변환과 명시적 형 변환을 하는 제공합니다. 묵시적 형 변환은 implicit 키워드를 operator 앞에 명시하고 형 변환하고자 하는 형식을 operator 뒤에 명시하면 됩니다. 명시적 형 변환은 explicit 키워드를 사용하면 됩니다.

public static implicit operator string(Man man)
{
    return man.name;
}