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#에서는 다양한 자료형을 제공하며, 값 형과 참조 형의 차이를 이해하는 것이 중요합니다.