삽질의 현장/- .NET

#019_닷넷(.NET)_.Net Framework 기본 - 참조 타입 과 값 타입의 의미

shovelman 2015. 10. 24. 09:51


지난 시간에 이어서 타입에 대해서...

즉, '참조 타입이냐, 값 타입이냐'에 대해서 알아보도록 하겠습니다.



지난 시간을 다시 곱씹어봅시다.

인터페이스를 제외한 나머지를 모두 하나의 타입이라고 생각하면 됩니다.

그런데 여기서 두 가지의 분류로 나눌 수가 있지요.

하나는 '값처럼 동작하는' 것,

다른 하나는 '값 처럼 동작하지 않는' 그 외... 즉, '참조로 동작하는' 것으로 나눌 수 있습니다.


Java는 내장 타입(int, float, double)과 같은 타입은 값 타입이 아닌 참조 타입입니다.

그래서 다른 타입들과 놀려면 변환 및 매핑을 해줘야되서 불편합니다.

C#은 Java를 등에 엎고(?) 나온 언어로써,

이러한 불편함을 느끼고 프로그램하기 보다 쉽게 만들어놓기 위해서 분류하여 나온 것입니다.

아무튼... 값 타입이라는 것을 이러한 이유로 만들었다 이겁니다.


값 타입은 전체적인 닷넷 타입으로 두 가지로 분류할 수 있습니다.

바로, '구조체'와 'Enum'입니다.

그리고 추가적으로 내장 타입(int, double, bool)도 사실 구조체입니다.

뭐... 사실 내장 타입은 struct로 만들어져 있습니다.

Enum도 정확하게 말하자면 구조체입니다. 

그러니까 모두 구조체 타입이지요...

또한, 이 셋을 모두 value 타입을 상속 받으니 값 타입이라고 부르는 것이고 말입니다...

따라서 이 셋의 핵심은 'Class Value Type'이지요...


이 Class Value Type은 '값으로 동작하는 기능'을 해줍니다.

값으로써 동작하는 기능... 중요합니다.

그 외에는 모두 클래스 타입입니다. 이 것들은 참조로써 동작하는 것이구요...


그래서 'Value Type'이라고 부르면 '구조체 타입'을 말하는 것이고,

'Reference Type' 이라고 부르면 '클래스 타입'이라고 부르는 것입니다.

그리고 모든 타입은 Class Type 이지요!

물론, 구체적으로 들어가면 조금씩 다르지만 말입니다...

모든 타입은 Class Tpye이 아니지요...


푸하하 재미있다... 장난 치는거 아닙니다.

이해가 안가시면 그림을 다시 한번 보시길 바랍니다.


허허... 

닷넷에서는 Class, Delegate, Struct, Enum 과 같이 분류를 해놨기 때문에

구체적으로는 틀리다고 한 것입니다.


만약, '모든 타입은 참조 타입이다!' 라고 하면 틀립니다.

참조, 값 은 Value Type을 상속받는 여부에 따라서 타입이 갈리기 때문입니다.

분명히 말하지만 interface는 논외입니다.

아무튼... 결론은 모든 타입은 참조 타입이거나 값 타입... 둘 중 하나입니다.


와우... 복습만 하다가 끝나버렸습니다.

허허허허허....

다음시간에 실제로 값 타입과, 참조 타입이 뭔지 알아가도록 해보겠습니다...


이상 삽잡이였습니다!