본문 바로가기

프로그래밍&IT/C#

c# Value & Reference type , 기본 데이터 타입

사실 c#으로 프로젝트,SI 보단

시스템 유지보수나 개인작성으로만 하다보니

실용만 생각했지

기본적인 면에서 약간 헷갈리는 부분도 존재했습니다.


구분
값 형식 (Value type)
참조 형식 (Reference Type)
종류
내장형 (int, char, float, ...)
사용자 정의형 (enum, struct)
Object, string
메모리 사용
Stack
Stack, Heap
대입 (Assignment)
복사
참조 변경
크기
고정
가변
Garbage Collector 지원
지원 X
지원 O


-> 다시 한 번 기본적인 것부터 생각해볼 수 있었네요...

문제는 가베지 콜렉터 지원이 무조건 다 되는줄 알았는데 그게 아니었네요.


* C# 기본 자료형
예약어 구조체 형식 기본값 범위 크기
bool
System.Boolean
false
-
1
byte
System.Byte
0
0~255
부호없는 8비트 정수
sbyte
System.SByte
0
-128~127
부호있는 8비트 정수
char
System.Char
'\0'
U+0000 ~ U+ffff
유니코드16비트 문자
decimal
System.Decimal
0.0M
+-1.0x10 28 ~ 7.9x1028
28-29개의 유효 자릿수
double
System.Double
0.0D
+-5.0x10324 ~ 1.7x10308
15-16개의 자릿수
float
System.Single
0.0F
+-1.5x1045 ~ +-3.4x1038
7개의 자릿수
int
System..Int32
0
-2,147,483,648 ~ 2,147,483,647
부호있는 32비트 정수
uint
System.UInt32
0
0 ~ 4,294,967,295
부호없는 32비트 정수
long
System.Int64
0L
-9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807
부호있는 64비트 정수
ulong
System.UInt64
0
0~18,446,744,073,709,551,615
부호없는 64비트 정수
object
System.Object
 
 
 
short
System.Int16
0
-32,768 ~ 32,767
부호있는 16비트 정수
ushort
System.UInt16
0
0 ~ 65,535
부호없는 16비트 정수
string
System.String
null
 
 


-> decimal은 별로 써본적이 없었네요.

간혹 자료형 overflow나 자료형간 변환시 참조하면 될것같습니다.


* 사용자 정의 데이터 형식

- 열거형 Enumeration, 상수집합을 정수형으로 대신해 표현

enum RGB {Red, Green, Blue}; => 각 상수별로 값 설정됨

 Red = 0 /  Green = 1 /  Blue = 2 ...


Console.WriteLine(RGB.Red); // 0

Console.WriteLine(RGB.Green);  // 1

Console.WriteLine(RGB.Blue);  // 2


- struct , 클래스와 비슷한 사용자 정의 자료형, 

struct Man

{

   public string name;

   public string height;

   public string weight;

   ...

}


Man park;


park.name = "박xx";

park.height = "167";

park.weight = "68";