C#의 데이터 타입(자료형) 분류

C#의 데이터 타입(자료형)

C#의 데이터 타입은 .NET Framework의 기본 클래스 라이브러리에 정의되어 있습니다.
(.NET Framework의 다른 언어들도 C#과 동일한 데이터 타입을 사용합니다. 이는 CTS(Common Type System)라고 불리는 공통 데이터 타입 시스템에 의해 가능합니다. CTS는 .NET Framework에서 사용되는 모든 언어에서 공통적으로 사용되는 데이터 타입을 정의하고 이러한 데이터 타입이 상호 호환되도록 보장합니다)


데이터 타입 분류

기본 제공 형식(built-in Types, Primitive Types)
C#에서 기본으로 제공하는 미리 정의된 데이터 타입으로  int, float, char, string, bool등이 있습니다. 

사용자 정의 형식(User-Defined Types)
사용자가 직접 정의한 데이터 타입으로 클래스(Class), 구조체(Structure), 열거형(Enum) 등이 있습니다.



시스템이 자료를 처리하는 방식(메모리 할당방식, 복사 메커니즘)에 따른 데이터 타입 분류

 
값 형식(Value type)
값 형식은 변수에 값을 할당할 때 그 값 자체가 메모리 스택(stack)에 직접 저장됩니다. 값 형식은 다음과 같습니다.
논리형(bool), 문자형(char), 부호 있는 정수형(sbyte, short, int, long), 부호 없는 정수형(byte, ushort, uint, ulong), 실수형(float, double, decimal), 구조체(struct), 열거형(enum)
 
예시
void test()
{
    int x = 10;
    Console.WriteLine(x);
}
 
위의 예시에서 정수형(int) 변수인 x를 선언하고 10이라는 값을 할당하였습니다. 이때 10이라는 값은 정수형(int)으로 메모리 스택에 직접 저장됩니다. 변수가 선언된 블록{ }이 끝나면 해당 변수는 범위를 벗어나게 되며 변수의 값과 할당된 메모리 공간이 스택에서 제거되고 해당 변수의 값은 더 이상 유효하지 않습니다.


참조 형식(reference type)
참조 형식은 값을 직접 저장하는 대신 메모리 상의 객체에 대한 참조(메모리 주소)를 저장합니다. 객체의 실제 데이터를 힙(heap)에 저장하고 변수에는 객체의 메모리 주소가 할당되며 해당 객체를 실제로 가리킵니다. 변수는 객체의 위치를 추적하는 역할을 합니다.
참조형식 데이터의 메모리 해제는 명시적으로 수행할수없으며 NET Framework의 핵심 기능 중 하나인 가비지 컬렉터(Garbage Collector)에 의해 수행됩니다. 가비지 컬렉터는 프로그램이 사용하는 메모리 중에서 더 이상 필요하지 않은 객체를 식별하고 자동으로 해제합니다.
참조 형식은 다음과 같습니다.
클래스(class), 인터페이스(interface), 델리게이트(delegate), 오브젝트 타입(object), 문자열(string), 배열(array)
 
예시
class Person {
    public string Name;
    public int Age;
}

Person person1 = new Person();
 
위의 코드에서 변수 person1의 값은 스택에 저장되지만 실제 객체는 힙 메모리에 저장됩니다. person1 변수의 값은 힙 메모리에 저장된 실제 객체의 메모리 주소입니다. 이 메모리 주소를 가지고 person1 변수는 힙 메모리에 저장된 객체를 참조할 수 있습니다.



댓글

Designed by JB FACTORY