제목을 이렇게 정하는게 맞는지 고민되네요. 저 두타입을 심도깊게 비교하자는게 아니고 기초적으로 알아보고자 합니다
저도 자세히는 알지 못하는지라(그러면서 왜 글을써 올려 라고 말씀하신다면 저...충격 ㅜㅜ) 아는 범위 안에서 써보겠습니다.
우선 메모리에 관련해서 이야기를 해보아야 할꺼같네요
자세히는 모르겠지만(또또 이러고 있네요 ㅜㅜ) code, data(static), stack(지역), heap(동적)으로 나눌 수 있습니다.
여기서 봐야될 것은 stack과 heap입니다.
stack은 생성, 소멸시 메모리가 자동으로 관리가 이루어집니다. 메모리의 이름을 지정할 수 있습니다.즉 메모리 자체를 하나의 변수의 지정 메모리로 생각하는 것이지요. 컴파일시에 크기가 결정되는 특징을 가지고 있습니다. 일명 value type이라고도 하지요~
heap의 경우는 동적으로 활당을 받게 됩니다. 생성, 소멸시 수동으로 관리를 해주어야 하죠. 그래서 heap의 경우 open을 하였다면 꼭 close를 해주어야 메모리 관리가 제대로 이루어 지게 됩니다. 혹시 해주지 않을시에는 작은 프로그램에서는 큰 상관이 없을지도 모르겠지만 좀만 큰 프로그램이 돌아간다면 그때는 메모리의 부하가 심해질 수 있으니 주의 해야겠지요. 그리고 이름의 사용이 불가능 하다는 특징이 있습니다. 값 자체를 메모리에 담는게 아니고 그 값을 가지고 있는 곳의 주소를 간직하고 있는 것이지요. 요놈은 Refernce type이라고 불립니다~
value type에는 struct, enum이 있고 heap type에는 class가 있습니다~
이론은 우선 여기서 살짝 그만 하고 테스트를 통해 알아보도록 하겠습니다. 솔직히 이부분은 이론과 테스트만으로는 쉽게 알 수 있는 부분은 아니라고 생각됩니다. 어느정도 프로그래밍의 경험이 필요한 부분이라고 생각이 들지요.
간단히 struct와 class의 차이를 봐보도록 할게요~
간단한 테스트를 위해서 따로 class를 생성하지 않고 한 곳에 모아 테스트를 해보도록 할게요
type이라는 프로젝트를 생성을 하고 코드를 넣어보도록 하겠습니다
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace type
7 {
8 class Program
9 {
10 struct TheStruct //Value Type
11 {
12 public int Data;
13 }
14
15 class TheClass //Reference Type
16 {
17 public int Data;
18 }
19
20 static void Main(string[] args)
21 {
22 TheStruct st = new TheStruct();
23 st.Data = 10;
24 TheStruct st2 = st;
25 st2.Data = 20;
26 Console.WriteLine("st.Data : {0}", st.Data);
27
28 TheClass cl = new TheClass();
29 cl.Data = 10;
30 TheClass cl2 = cl;
31 cl2.Data = 20;
32 Console.WriteLine("cl.Data : {0}", cl.Data);
33 }
34 }
35 }
다음과 같이 넣고 실행을 시켯을때 (Ctrl + F5) 결과를 보면 '얘 왜이래' 라는 생각을 하시는 분들도 있을겁니다. 결과는
struct는 value 타입이므로 st2가 변한다 하더라도 st에는 영향을 미칠수 없던 것이고 cl을 cl2에 대입했을 때 cl의 값을 넘긴게 아니고 cl의 주소값을 넘긴것이지요 그래서 cl2를 변경했을 때 cl이 가지고 있는 주소의 값이 같이 변경이 되는 것입니다. 그래서 결과가 다음과 같이 나오게 된것이지요.
허접한 설명이었지만 두 타입에 대해서 어느정도 이해가셨으면 하는 바램입니다~^ㅡ^
지루한 글 봐주시느라 수고하셨고 감사합니다~~
'.NET > C#' 카테고리의 다른 글
Class(2) (0) | 2009.12.16 |
---|---|
Class(1) (0) | 2009.12.16 |
C# enum, struct (0) | 2009.12.16 |
C# Array 에 대해서... (2) | 2009.12.16 |
C# 메소드 (0) | 2009.12.15 |
C# 반복문 (0) | 2009.12.15 |
C# 성적 관리 프로그램(단순 학점 부여) (0) | 2009.12.15 |
C# 기초 계산기 (0) | 2009.12.15 |
C# 타입 (0) | 2009.12.15 |
시샵 기초중에 기초 Hello world 시작하기 (0) | 2009.12.15 |