본문 바로가기
IT/C#(CS)

CS 기초강좌 5. C# System.Object에 대하여

by 신림83 2020. 10. 19.
반응형

CS 기초강좌 5. C# System.Object에 대하여

아래 코드부터 볼까요?

class Point
{
    public int x = 0;
    public int y = 0;
}

class Program
{
    static void Main(string[] args)
    {
        Point p = new Point();
    }
}

 간단하게 Point 라는 x,y 정보를 가지는 클래스를 만들어 보았습니다. 이 클래스를 생성시키고 x, y에 접근하려 했을 때, 아래와 같이 표시되는데요.

 

x,y 이외에도 무언가 많다.

Point p = new Point();
p.ToString(); //??

 분명히 새로 만든 클래스인데 내가 생성한 적 없는 메서드가 보입니다. 사용 또 한 되고요.

 

system.Object

이전 5강에서 c#은 모두 객체이라고 말한 적이 있습니다. 이를 의미하는 바는

Point p = new Point();
p.ToString(); //??

10.ToString();
'a'.ToString();

정수형, 문자형 또한 위의 메소드가 사용 가능하단 것이죠.

 

그렇습니다. 당신이 선언한 클래스 또한 객체입니다. 당신은 명시적으로 상속해주지 않았지만, C#은 컴파일 시 당신을 클래스를 다음과 같이 상속시킵니다.

class Point : System.Object
{
    public int x = 0;
    public int y = 0;
}

이 System.Object 라는 녀석을 조금 살펴볼까요?

    public class Object
    {
        
        public Object();
        ~Object();
        
        public static bool Equals(Object objA, Object objB);
        public static bool ReferenceEquals(Object objA, Object objB);
        
        public virtual bool Equals(Object obj);
        public virtual int GetHashCode();
        
        public Type GetType();
        public virtual string ToString();
        
        protected Object MemberwiseClone();
    }

static 메소드 둘과 virtual 메소드 3이 보입니다. static 맴버는 형태에서 바로 호출하여 써야 합니다.

static 메서드 들이 보입니다.

C#은 모두 객체이고 Object를 상속받는다는 것 알아주세요.

 

tostring의 사용해봅시다.

    static void Main(string[] args)
    {
        Point p = new Point();

        Console.WriteLine(p.ToString());
        Console.WriteLine(p);

        Console.WriteLine(10.ToString());

        Console.WriteLine(10);

        Console.WriteLine('a'.ToString());
        Console.WriteLine('a');
    }

출력결과입니다.

tostring 의 기본 구현은 타입 이름을 문자열로 반환합니다. console.writeline 또한 문자열이 입력되지 않으면 내부적으로 tostring을 이용하여 출력함을 볼 수 있습니다.

 

tostring 은 virtual이었습니다. 재정의 하여 조금 더 자세히 출력하여 봅시다.

class Point : System.Object
{
    public int x = 0;
    public int y = 0;

    public override string ToString()
    {
        return string.Format($"{base.ToString()} x:{x} y:{y}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Point p = new Point();
        Console.WriteLine(p.ToString());
    }
}

 

출력결과입니다.

 재정의하여 보다 자세하게 출력할 수 있습니다. 일반적으로도 객체의 상태를 보여주기 위해 재정의를 많이 합니다.

Object의 다른 기능들 또한 많이 사용합니다. 앞으로 차차 설명을 적어보도록 하겠습니다.

 

 

 

배웁시다.

봐주셔서 감사합니다.

반응형

댓글