'연산자오버로딩'에 해당되는 글 1건

  1. 2007.05.29 C#과 Java언어 비교(6) - Operator Overloading

C#과 Java언어 비교(6) - Operator Overloading

C# and JAVA 2007. 5. 29. 10:57

http://genamics.com/developer/csharp_comparative_part7.htm


10.
연산자 오버로딩(Operator Overloading)

연산자 오버로딩은 프로그래머가 자연스럽게 받아들일 있는 타입을 만들어 그것을 단순한 타입(int, long )처럼 사용할 있도록 해준다. C# C++ 보다는 엄격한 버전의 연산자 오버로딩을 구현하긴 하지만 연산자 오버로딩의 전형적인 예와 같은 클래스와 복잡한 숫자 클래스도 작동하도록 해준다.

C#에서 == 연산자는 레퍼런스로 비교되는 object 클래스의 비가상(non-virtual; 연산자는 virtual 없다) 메소드이다. 여러분이 클래스를 만들 여러분만의 == 연산자를 정의할 수도 있다. 만약 여러분이 컬렉션을 가진 클래스를 사용할 경우에는 IComparable 인터페이스를 구현해야만 한다. 인터페이스는 개의 구현해야할 메소드를 가지고 있는데, CompareTo(object) 메소드로 불리며 “this” 크면 양수를, 작으면 음수를, 혹은 객체와 같은 값을 가질 경우 0 리턴해야 한다. 또한 여러분이 만든 클래스를 사용하는 사람이 나은 문법을 갖기를 원한다면 <, <=, >=, > 메소드를 정의할 수도 있다. 수치형 타입(int, long ) IComparable 인터페이스를 구현한다.

아래에는 동일성과 비교를 처리하는 방법의 예를 보여준다:

public class Score : IComparable
{
    int value;
    public Score (int score) {
        value = score;
    }
 
    public static bool operator == (Score x, Score y) {
        return x.value == y.value;
    }
 
    public static bool operator != (Score x, Score y) {
        return x.value != y.value;
    }
 
    public int CompareTo (object o) {
        return value - ((Score)o).value;
    }
}
 
Score a = new Score (5);
Score b = new Score (5);
Object c = a;
Object d = b;








a
b 레퍼런스로 비교하려면:
System.Console.WriteLine ((object)a == (object)b; // false 

a
b 값으로 비교하려면:
System.Console.WriteLine (a == b); // true

c
d 레퍼런스로 비교하려면:
System.Console.WriteLine (c == d); // false

c
d 값으로 비교하려면:
System.Console.WriteLine (((IComparable)c).CompareTo (d) == 0); // true

또한
여러분은 <, <=, >=, > 연산자를 추가하여 클래스의 점수를 매길 수도 있다. C# 논리적으로 짝을 이루는
(!= ==, > <, >= <=) 연산자가 모두 정의되어야 함을 컴파일 시점에서 보장한다.
: