C#의 모든 자료형은 Object를 상속받도록 되어 있습니다.
Object는 모든 형식의 부모이기 때문에 어떤 자료형이든 담을 수 있고 앞선 [C#] 박싱과 언박싱에서 포스팅했듯이 object 배열을 사용해서 다양한 자료형을 편리하게 사용할 수 있습니다. 물론 단점도 분명히 존재합니다. (링크 참고)
C#의 object 형식을 공부하다가 발견한 포스팅에서 서두에 나왔던 질문입니다.
C#의 모든 자료형은 Object(System.Object)를 상속한다고 했습니다.
그렇다면 "C#의 모든 자료형은 객체라고 할 수 있는 건가?"라는 의문이 생겼습니다.
일단은 이 질문의 대한 대답은 "No" 입니다.
위의 링크로 들어가보면 int에 대한 설명이 잘 정리되어 있습니다.
int와 같은 원시 타입은 구조체로 구현이 되어 있습니다. 그런데 int는 System.ValueType을 상속받고 있습니다.
하지만 구조체는 상속할 수도, 받을 수도 없는 자료형으로 알고 있어서 당황스러웠습니다.
결론을 정리하자면 구조체가 클래스를 상속받는 것은 가능하며 모든 구조체는 System.Object로부터 파생된 System.ValueType 클래스를 암시적으로 상속받고 있습니다.
객체라는 단어를 해석하기에 따라 두 가지 해석으로 나뉜다고 합니다.
.NET framework에서 정의한 System.Object의 별칭이 객체(Object)이고 동적으로 생성된 클래스의 인스턴스도 객체라고 부르기 때문에 해석이 갈리게 됩니다.
상속적인 측면에서 보면 거의 모든 것들은 객체라고 할 수 있습니다. 거의 모든이라고 하는 이유는 인터페이스 타입과 포인터는 System.Object를 상속받지 않는다고 합니다.
참조 형식과 값 형식의 관점에서 보면 모든 것이 객체라고 할 수는 없습니다. 값 형식은 System.Object를 상속받긴 하지만 참조 형식(객체)과 전혀 다르게 취급이 됩니다. 데이터를 저장하는 방식도 다르고 변수에 값을 대입하는 과정도 너무나 다릅니다.
C#의 모든 자료형을 객체라고 할 수는 없습니다.
거의 모든 자료형이 System.Object를 상속받는 표현이 적합하다고 할 수 있습니다.
공부하면서 생각해보니 표현과 관점의 차이 정도로 생각이 듭니다.
많은 도움이 되었습니다, 감사합니다.