C#을 처음 배우거나, 더 깊이 이해하고 싶은 개발자를 위한 C# 타입 시리즈를 시작합니다! 🎉
이 시리즈에서는 C#의 다양한 타입을 완벽하게 이해하고, 실제 개발에서 어떻게 활용하는지 알아볼 거예요.
첫 번째 편에서는 C#의 기본 타입(Primitive Type)과 주요 개념을 다룹니다.
✔️ 값 타입과 참조 타입의 차이
✔️ C#의 기본 데이터 타입
✔️ 변수 선언, 초기화, 할당
이 글을 읽고 나면, C#의 타입 시스템을 확실히 이해할 수 있을 거예요! 😃
1️⃣ C#의 타입 시스템 개요
C#의 모든 데이터는 값 타입(Value Type) 또는 참조 타입(Reference Type)으로 구분돼요.
이 차이를 알면, 메모리 관리와 성능 최적화에 도움이 됩니다!
🔹 값 타입(Value Type)
- 스택(Stack) 메모리에 저장됨
- 직접 값을 저장 (복사 시 값이 복사됨)
- 기본적으로 struct로 정의됨
예제:
int a = 10;
int b = a; // b는 a의 값을 복사받음 (독립적인 메모리 공간)
b = 20;
Console.WriteLine(a); // 10 (b를 변경해도 a는 변하지 않음)
Console.WriteLine(b); // 20
🔹 참조 타입(Reference Type)
- 힙(Heap) 메모리에 저장됨
- 변수는 객체의 참조(주소)를 저장
- 같은 객체를 여러 변수가 공유 가능
예제:
class Person
{
public string Name;
}
Person p1 = new Person();
p1.Name = "Alice";
Person p2 = p1; // 같은 객체를 참조 (주소가 복사됨)
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Bob (p2가 변경하면 p1도 영향을 받음)
Console.WriteLine(p2.Name); // Bob
2️⃣ C#의 기본 타입 (Primitive Type)
C#에서 가장 많이 사용하는 기본 데이터 타입들을 정리해볼게요!
타입 크기 범위 기본값 설명
타입 | 크기 | 범위 | 기본값 | 설명 |
byte | 1 byte | 0 ~ 255 | 0 | 작은 정수 |
short | 2 byte | -32,768 ~ 32,767 | 0 | 중간 크기 정수 |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 | 0 | 일반적인 정수 |
long | 8 byte | 어마어마하게 큼 | 0L | 큰 정수 |
float | 4 byte | ±3.4E±38 | 0.0f | 소수점 숫자 (정확도 낮음) |
double | 8 byte | ±1.7E±308 | 0.0d | 일반적인 소수점 숫자 |
decimal | 16 byte | ±1.0E±28 | 0.0m | 금융, 계산 등에 사용 |
bool | 1 byte | true or false | false | 논리 값 |
char | 2 byte | 1개 문자 (유니코드) | '\0' | 문자 저장 |
string | 가변 | 문자열 | null | 텍스트 데이터 |
✅ 기본 타입 선언과 초기화 예제
int age = 25;
double pi = 3.14159;
char grade = 'A';
string name = "C# 프로그래머";
bool isActive = true;
int, double, char 같은 기본 타입은 값 타입이라서 스택에 저장돼요.
하지만 string은 참조 타입이라 힙에 저장된 문자열 데이터를 참조하는 형태예요.
3️⃣ 변수 선언, 초기화, 할당
🔹 변수 선언 & 초기화
int number; // 선언 (초기화 X)
number = 10; // 할당
string message = "Hello, C#!"; // 선언 + 초기화
- 변수 선언만 하면 초기값이 없음! (사용 전 반드시 초기화해야 함)
- string 타입은 null로 초기화 가능
🔹 값 타입과 참조 타입의 차이 (할당 예제)
// 값 타입 예제
int x = 10;
int y = x;
y = 20;
Console.WriteLine(x); // 10 (값이 복사되었기 때문)
Console.WriteLine(y); // 20
// 참조 타입 예제
string s1 = "Hello";
string s2 = s1;
s2 = "World";
Console.WriteLine(s1); // "Hello" (문자열은 불변 객체!)
Console.WriteLine(s2); // "World"
🔹 string은 참조 타입이지만 불변(Immutable) 객체라 값이 바뀔 때 새로운 메모리를 할당해요.
즉, s2에 새로운 값을 넣으면 원래 s1과는 다른 메모리 주소를 가지게 돼요!
4️⃣ 특별한 타입 - var, object, dynamic
C#에는 기본 타입 외에도 유연하게 사용할 수 있는 타입이 있어요.
🔹 var (컴파일러가 타입 추론)
var num = 100; // int로 추론
var text = "Hello"; // string으로 추론
💡 단, var는 반드시 초기화해야 타입을 추론 가능!
🔹 object (모든 타입의 부모)
object obj = 42; // int 저장 가능
obj = "Hello"; // string도 저장 가능
💡 하지만 object를 사용하면 캐스팅이 필요할 수도 있음!
🔹 dynamic (런타임에 타입 결정)
dynamic dyn = 10;
dyn = "C#"; // 타입 변경 가능
💡 dynamic은 컴파일 시 타입 체크가 안 되므로, 런타임 오류가 날 수 있음!
✅ 마무리
이번 글에서는 C#의 기본 타입과 변수 선언/할당에 대해 알아봤어요! 🚀
✔ 값 타입 vs 참조 타입 차이
✔ C#의 기본 데이터 타입 종류
✔ 변수 선언, 초기화, 할당
✔ var, object, dynamic 같은 특수 타입
💡 다음 시리즈에서는 enum, struct, List<T> 같은 컬렉션 타입을 깊이 있게 알아볼 예정입니다!