숏컷 코드
int score = 100;
long bigNum = 10_000_000_000L;
double pi = 3.14159;
float temp = 36.5f;
decimal price = 9.99m;
bool isReady = true;
char grade = 'A';
string name = "Mina";
var level = 3; // 컴파일러가 int로 추론
var msg = "hello"; // 컴파일러가 string으로 추론문법
어떤 기본 타입이 있나
C# 기본형은 크게 정수형, 실수형, 논리형, 문자/문자열, **참조형 추론(var)**으로 나눠 보면 읽기 쉽습니다.
// 정수형
byte small = 255;
int count = 100;
long total = 10_000_000_000L;
// 실수형
float temperature = 36.5f;
double ratio = 3.14159;
decimal price = 19.99m;
// 논리 / 문자 / 문자열
bool isReady = true;
char grade = 'A';
string name = "Mina";실전에서는 대부분 int, double, decimal, bool, string부터 시작하고, 범위나 의미가 더 분명해야 할 때만 다른 타입으로 내려갑니다.
정수 타입 — 크기와 범위
C#의 정수 타입은 크기에 따라 다릅니다. 대부분의 경우 int (32비트, ±21억)를 쓰고, 범위를 넘어야 할 때만 long (64비트, ±922경)을 씁니다.
int count = 100; // 32비트 (-2,147,483,648 ~ 2,147,483,647)
uint flags = 0xFF_FF; // 32비트 부호 없음 (0 ~ 4,294,967,295)
long id = 9999999999L; // 64비트, L 접미사 필수
short age = 25; // 16비트 (-32,768 ~ 32,767)
byte b = 255; // 8비트 (0 ~ 255), 바이너리 데이터에 사용_는 숫자 구분자입니다. 10_000_000처럼 쓰면 읽기 쉬워지고 값에는 영향이 없습니다.
실수 타입 — float vs double vs decimal
double 은 64비트 IEEE 754 부동소수점으로, C#의 기본 실수 타입입니다. float 은 32비트로 정밀도가 낮지만 메모리를 아낄 때 씁니다. decimal 은 128비트 10진수 기반으로 금액처럼 소수 오차가 허용되지 않는 곳에 씁니다.
double d = 3.14; // 접미사 없으면 double
float f = 3.14f; // f 접미사 필수
decimal m = 9.99m; // m 접미사 필수
// 부동소수점 오차 예시
Console.WriteLine(0.1 + 0.2); // 0.30000000000000004
Console.WriteLine(0.1m + 0.2m); // 0.3 — decimal은 정확| 타입 | 크기 | 유효 자릿수 | 주요 용도 |
|---|---|---|---|
float | 32비트 | ~7자리 | 그래픽, 센서 데이터 |
double | 64비트 | ~15자리 | 일반 과학/공학 계산 |
decimal | 128비트 | ~28자리 | 금액, 세금, 회계 |
var — 타입 추론
var 는 초기값을 보고 컴파일러가 타입을 결정하는 정적 타입 변수입니다. 런타임 동적 타입인 dynamic과 다르며, 컴파일 후에는 일반 변수와 동일합니다.
var count = 0; // int
var name = "Mina"; // string
var items = new List<string>(); // List<string>
// var를 쓸 수 없는 경우
var x; // ❌ 초기화 없이는 추론 불가
var n = null; // ❌ null만으로는 타입 추론 불가List<string> names = new List<string>();
var users = new List<string>();
// 둘 다 타입은 List<string>로 고정된다.
users.Add("Mina");지역 변수 오른쪽 타입이 이미 길게 드러나는 경우에는 var가 읽기 쉽습니다. 반대로 숫자나 null처럼 오른쪽만 봐서는 의미가 약한 경우에는 명시 타입이 더 낫습니다.
타입 변환 — 암시적 vs 명시적
작은 타입 → 큰 타입은 값 손실이 없으므로 암시적 변환이 가능합니다. 반대 방향은 캐스팅이 필요하고 값이 잘릴 수 있습니다.
int i = 100;
long l = i; // 암시적 변환 (int → long, 안전)
double d = i; // 암시적 변환 (int → double, 안전)
double pi = 3.14;
int truncated = (int)pi; // 명시적 캐스팅 — 소수점 버림 → 3
// 문자열 변환
string s = 42.ToString();
int n = int.Parse("42"); // 실패 시 예외
int m = int.TryParse("?", out int result) ? result : 0; // 안전double taxRate = 0.1;
decimal amount = 100m;
// ❌ 서로 다른 실수 체계를 바로 섞을 수 없음
// decimal total = amount * taxRate;
// ✅ 한쪽으로 맞춘다
decimal total = amount * (decimal)taxRate;체크포인트
| 타입 | 크기 | 리터럴 접미사 | 대표 용도 |
|---|---|---|---|
int | 32비트 | 없음 | 카운터, 인덱스 |
long | 64비트 | L | 큰 숫자, ID |
float | 32비트 | f | 그래픽, 센서 |
double | 64비트 | 없음 | 일반 실수 계산 |
decimal | 128비트 | m | 금액, 회계 |
bool | 1비트 | true/false | 조건 분기 |
char | 16비트 | 'A' | 단일 문자 |
string | 가변 | "text" | 텍스트 |
var | — | — | 타입 추론 지역 변수 |
double은 일반 계산, decimal은 금액, var는 타입이 이미 오른쪽에서 충분히 보일 때 쓰는 정도로 기억해 두면 대부분의 입문 코드는 정리됩니다.
주의할 점
var는 동적 타입이 아닙니다. 컴파일 시점에 타입이 고정되는 일반 지역 변수입니다. 초기화 없이는 선언할 수 없고, null만으로는 추론이 불가능합니다.
float와 double의 부동소수점 오차는 이진수 표현의 한계에서 옵니다. 금액 계산에 이 타입을 쓰면 오차가 누적됩니다. 돈과 관련된 값은 반드시 decimal을 쓰세요.
참고 링크
2 sources