삽질의 현장/- .NET

#018_닷넷(.NET)_.Net Framework 기본 - Type에 대한 내용

shovelman 2015. 10. 24. 08:38


안녕하세요 삽잡이입니다.


이번시간에는 닷넷에서 제공하는 타입들에 대해서 알아보는 시간을 가지려고합니다.

오늘도 어김없이 힘들기 때문에...

아... 토요일 아침은 늘 힘들군요...

했던말을 또 할 수 있으니 양해바랍니다...



닷넷에는 다섯가지의 타입이 있다고 했습니다.

Interface, Class, Struct, Enum, Delegate 이렇게... 다섯가지가 있지요...

참고로 C#에서는 C++과 다르게 클래스와 구조체는 전혀 다른 타입입니다.

C++에서는 기본적인 가시성만 맞더라도 같은 취급을 했었습니다.

 

아무튼... 그런데 또 이 다섯가지를 같은 범주끼리 묶을 수가 있습니다.

Class, Delegate를 묶어서 Class 형식,

Struct, Enum을 묶어서 Struct 형식으로 말입니다.

 

뭐... Interface는 왕따입니다. 즉, interface는 별도의 형식입니다.

따라서, Class, Struct 형식에 포함되지 않습니다.

 즉, 세분화하지 않고 축약하면 C#에서는 세가지의 형식을 지원해주군요...

interface, class, struct.. 이 세가지 형식 말입니다.

 

Class 형식은 '참조 형식'(Reference)을 만들어내고,

Struct 형식은 '값 형식'(Value)을 만들어냅니다.

 

자... 그러면 지금부터 보다 자세하게 시작해보도록 하겠습니다.


 


모든 객체의 부모 형식은 Object입니다.

따라서 모든 타입은 이 부모인 Object를 상속받아서 만들어집니다.

 

* interface는 논외입니다...  왕따이지 않습니까...

사실, interface는 타입이긴 하지만 객체라고 하기는 좀... 그렇습니다.

인터페이스는 '서로간에 지켜야할 약속'일 뿐입니다.

객체와는 거리가 좀 있습니다..

 

아무튼... 정리하자면

Object 형식으로부터 모든 타입이 파생된다는 사실을 기억하시길 바랍니다.

 

Object는 class 형식입니다.

따라서 Obejct는 Class 형식인 '참조 형식'이라고 부릅니다.

그런데, 여기서 또 두가지의 분류로 나뉩니다.

하나는 vlaue type 이라는 class 형식, 그리고 그 외의 것들로 나눌 수 있습니다.


모든 구조체 타입은 value type을 상속 받습니다.

여기에는 구조체, enum, 내장 수치타입(int, double, bool...) 등이 있습니다.

뭐... 핵심은 이들이 모두 value type... 즉, 값 형식이라는 것입니다.


그런데 왜 이런 개념을 만들었을까요?

Value Type들은 모두 값 처럼 다루는 것이 훨씬 효율적이고,

그 외에는 또 그에 맞게 다루는 것이 효율적이기 때문입니다.

Value Type을 제외한 나머지는 모두 Class 타입입니다.


자... 정리를 해봅시다... (이런 정리병...)

닷넷의 타입은 interface를 빼고 네가지가 있는데 

구조체, enum은 값 타입이고 나머지는 class 타입입니다.

그런데, 이 interface를 제외한 모든 형식은 object 타입이구요.

따라서 class object로 부터 타입이 파생되는 것입니다.


그렇게 따지면 사실은 모두 다 class 입니다.

그런데, 타입마다 가지고 있는 특징들이 있을 것 아니겠습니까...

이에 따라 분류를 해놓은 것이지요....

특징, 타입을 만든 목적, 사용하고자 하는 이유, 사용되는 위치 등등 다 다르기 때문에...

 

즉, 완전히 분류되어 있는 것이 아니라 타입에 사용되는 용도, 특징이 다르기 때문에

닷넷에서는 구분을 하여 각각에 맞게(?) 분류를 하여 타입을 나눈 것이라는 소리입니다.


여기서 문제!

'Delegate는 Class 타입인가요?' 라구 물어보면...

정답입니다. 하지만, delegate 라는 놈은 특정한 위치에서 많이 사용되니까 

따로 타입으로 만들어 놓은 것이지요... 라고 대답할 수 있어야됩니다.



이번 시간은 여기까지 하도록 하겠습니다.

이상 삽잡이였습니다!