C#

C# 01 ( 자료형 )

상상모음 2025. 3. 12. 13:19

C#의 자료형(Data Type)은 크게 **값 형(Value Type)**과 **참조 형(Reference Type)**으로 나뉘며, 각각의 특성과 용도가 다릅니다.


1. 값 형(Value Type)

값 형은 데이터를 스택(Stack) 메모리에 저장하며, 변수에 직접 값을 저장합니다. 따라서, 값 형 변수 간의 할당은 값을 복사하는 방식으로 이루어집니다.

기본 값 형

자료형 크기 기본값 설명
byte 1 byte 0 0~255 (부호 없음)
sbyte 1 byte 0 -128~127 (부호 있음)
short 2 byte 0 -32,768~32,767 (부호 있음)
ushort 2 byte 0 0~65,535 (부호 없음)
int 4 byte 0 -2,147,483,648~2,147,483,647
uint 4 byte 0 0~4,294,967,295
long 8 byte 0L -9,223,372,036,854,775,808~9,223,372,036,854,775,807
ulong 8 byte 0UL 0~18,446,744,073,709,551,615
float 4 byte 0.0f 단정밀도 부동소수점 (소수점 이하 약 7자리)
double 8 byte 0.0d 배정밀도 부동소수점 (소수점 이하 약 15자리)
decimal 16 byte 0.0m 고정소수점 (소수점 이하 28~29자리)
char 2 byte '\0' 유니코드 문자 (문자 하나 저장)
bool 1 byte false true 또는 false

구조체(Struct)

사용자가 직접 정의할 수 있는 값 형 데이터 구조입니다.

struct Point {
    public int X;
    public int Y;
}

열거형(Enum)

여러 개의 상수를 묶어 관리하는 자료형입니다.

enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

2. 참조 형(Reference Type)

참조 형은 데이터를 힙(Heap) 메모리에 저장하며, 변수는 데이터의 주소(참조)를 저장합니다. 따라서, 참조 형 변수 간의 할당은 주소를 복사하는 방식으로 이루어집니다.

기본 참조 형

자료형 기본값 설명
string null 문자열을 저장하는 불변(immutable) 객체
object null 모든 데이터 형의 기본형 (C#의 최상위 클래스)
dynamic 없음 런타임에 형이 결정되는 동적 형

클래스(Class)

객체를 생성할 수 있는 참조 형입니다.

class Person {
    public string Name;
    public int Age;
}

배열(Array)

동일한 형식의 데이터를 연속적으로 저장하는 자료 구조입니다.

int[] numbers = {1, 2, 3, 4, 5};

인터페이스(Interface)

클래스 또는 구조체가 구현해야 하는 멤버를 정의하는 형식입니다.

interface IAnimal {
    void Speak();
}

델리게이트(Delegate)

메서드를 참조하는 형식입니다.

delegate void MyDelegate(string message);

3. Nullable 형식 (Nullable<T> / ? 연산자)

C#의 값 형은 기본적으로 null 값을 가질 수 없지만, Nullable<T> 또는 ? 연산자를 사용하여 null을 가질 수 있도록 만들 수 있습니다.

int? number = null;  // Nullable<int>

4. 형 변환 (Type Casting)

1) 암시적 변환 (Implicit Conversion)

컴파일러가 자동으로 변환할 수 있는 경우

int num = 100;
long bigNum = num;  // int → long 자동 변환

2) 명시적 변환 (Explicit Conversion)

개발자가 직접 변환해야 하는 경우 ((자료형)값 형식)

double pi = 3.14;
int intPi = (int)pi;  // double → int 강제 변환 (소수점 버림)

3) Convert 클래스 사용

string str = "123";
int num = Convert.ToInt32(str);

4) Parse() 및 TryParse()

int num1 = int.Parse("123");  // 변환 실패 시 예외 발생
bool success = int.TryParse("123", out int num2);  // 변환 실패 시 false 반환

C#에서는 다양한 자료형을 제공하며, 값 형과 참조 형의 차이를 이해하는 것이 중요합니다.