본문 바로가기
카테고리 없음

C# 타입 완전 정복 (1편) - 기본 타입과 변수 선언

by bbongz 2025. 3. 10.

 

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> 같은 컬렉션 타입을 깊이 있게 알아볼 예정입니다!