반응형
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에 접근하려 했을 때, 아래와 같이 표시되는데요.
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 맴버는 형태에서 바로 호출하여 써야 합니다.
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의 다른 기능들 또한 많이 사용합니다. 앞으로 차차 설명을 적어보도록 하겠습니다.
봐주셔서 감사합니다.
반응형
'IT > C#(CS)' 카테고리의 다른 글
CS 기초강좌 7. 값 타입과 참조 타입의 비교 연산자 == or Equality (4) | 2020.11.13 |
---|---|
CS 기초강좌 6. 값 타입과 참조 타입, 스택과 힙, struct와 class (4) | 2020.11.11 |
CS 기초강좌 4. C# 타입, 변수의 특징 (2) | 2020.10.18 |
CS 기초강좌 3. C# interface 인터페이스 (2) | 2020.10.17 |
CS 기초강좌 2. C# 클래스 기초 (12) | 2020.10.16 |
댓글