.NET/C#

System.Object 클래스 상속

엔젤루스 2009. 12. 18. 10:44
728x90
반응형
사용자가 만드는 대부분(거의 모든)의 클래스는 자동으로 System.Object 클래스를 상속 받게 되어집니다. 그래서 내가 만든 클래스에 보면 ToString(), Equals(), GetHashCode()라는 메소드가 인텔리전스로 같이 나오는걸 항상 볼수가 있었지요. 뭐 제가 아는 것인 이것까지이고요 ^^

상속을 받은 메소드이기 때문에~

우리는 이 메소드들을 우리가 마음대로 가지고 놀(?) 수가 있는 것이지요.

그럼 한번 Object 클래스를 상속 받아 제가 원하는 방식으로 바꿔보겠습니다.(원래 어떤 형식인지는 뜯어보지 않아서 잘은 모르겠습니다 ㅜㅜ)

    1 class Dummy : Object

    2 {

    3     private int data;

    4     public int Data

    5     {

    6         get { return data; }

    7         set { data = value; }

    8     }

    9     public override string ToString()

   10     {

   11         return "이 객체는 Dummy 타입의 객체입니다.";

   12     }

   13     public override bool Equals(object obj)

   14     {

   15         if (obj is Dummy)//obj가 Dummy타입인지 확인

   16             return this.Data == ((Dummy)obj).Data;    //데이터 자체를 비교

   17         else

   18             return false;

   19     }

   20 }
다음과 같이 ToString(), Equals() 메소드를 제정의 하였습니다 ToString() 메소드는 호출시 "이 객체는 Dummy타입의 객체입니다."라는 문구를 반환하게 재설정하였고 Equals는 해당 데이터가 Dummy타입인지 먼저 검사하고 두 데이터가 같은지를 반환해줍니다. 메인에서 직접 테스트 해보도록 하지요.

    1 class Program

    2  {

    3     static void Main(string[] args)

    4     {

    5         Dummy dummy = new Dummy();

    6         Console.WriteLine(dummy.ToString()); //dummy.ToString()호출

    7         Dummy dummy1 = new Dummy();

    8         dummy1.Data = 10;

    9         Dummy dummy2 = new Dummy();

   10         dummy2.Data = 10;

   11         if(dummy1.Equals(dummy2))                //재정의 Equals메소드로 비교

   12             Console.WriteLine("같습니다.");

   13         else

   14             Console.WriteLine("다릅니다.");

   15         if(object.ReferenceEquals(dummy1,dummy2))  //참조를 비교

   16             Console.WriteLine("같습니다.");

   17         else

   18             Console.WriteLine("다릅니다.");

   19     }

   20  }

처음에는 Dummy  클래스에서 정의한 ToString()에 대한 테스트이고 그 다음은 Equals 메소드에 대한 테스트입니다. 보통 Equals는 기본적으로 참조를 비교하게 되어 있지요. 만약 재정의한 Equals 메소드가 참조를 비교한다면 절대 같을 수가 없겠죠. 서로 다른 클래스이니깐요. 결과를 한번 봐보도록하죠

네 결과를 보면 ToString 메소드는 우리가 설정한대로 나왔다는걸 볼수 있지요. 그리고 Equals 또한 참조 비교가 아니라 값 비교를 한다는걸 볼수 있습니다. 아래의 ReferenceEquals와 다른 값이 나왔다는 걸 보면 한눈에 이해 할 수 있다고 봅니다~^^

이와같이 MS에서 이미 만들어 놓은 클래스들도 개발자가 다시 재정의해서 사용할 수 있다는 것을 알아보았습니다. 때에 따라 꼭 재정의를 해서 사용해야 될 경우가 많이 생기게 됩니다. 상속과 재정의 다형성을 잘 이해하셔서 잘만 쓰신다면 좋은 개발자가 되지 않을까라는 생각을 조심스레 하고 이것으로 마치도록 하지요 ^^

감사합니다~

728x90
반응형