본문 바로가기

.NET/C#

System.Object 클래스 상속

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
반응형

'.NET > C#' 카테고리의 다른 글

C# File Input/Output  (1) 2009.12.24
C# Collection  (0) 2009.12.21
Interface  (0) 2009.12.18
Class(5)  (0) 2009.12.18
형변환에 대해서...  (0) 2009.12.18
Property의 get, set 에 대한 간단한 정리  (0) 2009.12.18
Class(4)  (0) 2009.12.17
Class(3)  (0) 2009.12.17
Class(2)  (0) 2009.12.16
Class(1)  (0) 2009.12.16