C#은 기본 내장 미리 정의 타입을 총 16가지 제공하며, 단순 타입 13가지와 비단순 타입 3가지로 나뉩니다. 모든 미리 정의 타입의 이름은 전부 소문자로 작성해야 합니다.
graph TD
A[미리 정의 타입] --> B[단순 타입]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[비수치 타입]
B --> G[수치 타입]
F --> H[bool]
F --> I[char]
G --> J[정수]
G --> K[부동 소수점]
J --> L[8비트]
J --> M[16비트]
J --> N[32비트]
J --> O[64비트]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% 리프 노드 녹색 지정
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee90단순 타입 13가지
- 수치 타입(총 11가지) 정수 8종:
sbyte/byte, short/ushort, int/uint, long/ulong부동소수점 3종:float, double, decimal(decimal은 금액 고정밀 연산에 특화됨) - 비수치 타입(총 2가지):
char(유니코드 단일 문자),bool(true/false 두 값만 가짐)
특징: C#은 C/C++와 달리 숫자 값을 직접 불린 판별 조건으로 사용할 수 없습니다.
비단순 참조 타입 3가지
string(문자열 시퀀스), object(모든 타입의 기본 클래스), dynamic(동적 언어 상호운용용)
C# 타입과 .NET 타입
모든 내장 미리 정의 타입은 하위 .NET 타입에 직접 매핑됩니다. C# 타입 키워드는 해당 .NET 타입의 별칭일 뿐이므로 .NET 원본 클래스명을 써도 정상 컴파일되지만 공식 가이드에서는 권장하지 않습니다. C# 코드 작성 시 .NET 전체 클래스명보다 C# 내장 키워드 별칭을 우선 사용하는 것이 좋습니다.
미리 정의 단순 타입
| C# 키워드 | 설명 | 값 범위 | 하위 .NET 타입 | 기본값 |
|---|---|---|---|---|
| sbyte | 8비트 부호 있는 정수 | -128 ~ 127 | System.SByte | 0 |
| byte | 8비트 부호 없는 정수 | 0 ~ 255 | System.Byte | 0 |
| short | 16비트 부호 있는 정수 | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | 16비트 부호 없는 정수 | 0 ~ 65535 | System.UInt16 | 0 |
| int | 32비트 부호 있는 정수 | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | 32비트 부호 없는 정수 | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | 64비트 부호 있는 정수 | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | 64비트 부호 없는 정수 | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | 단정밀도 부동소수점 | 1.5×10⁻⁴⁵ ~ 3.4×10³⁸ | System.Single | 0.0f |
| double | 배정밀도 부동소수점 | 5×10⁻³²⁴ ~ 1.7×10³⁰⁸ | System.Double | 0.0d |
| bool | 불린 타입 | true / false | System.Boolean | false |
| char | 유니코드 문자 | U+0000 ~ U+FFFF | System.Char | \x0000 (널 문자) |
| decimal | 고정밀도 십진수 (유효숫자 28자리) | ±1.0×10⁻²⁸ ~ ±7.9×10²⁸ | System.Decimal | 0m |
미리 정의 비단순 타입
| C# 키워드 | 설명 | 하위 .NET 타입 |
|---|---|---|
| object | 단순 값 타입을 포함한 모든 타입의 기본 클래스 | System.Object |
| string | 0개 이상의 유니코드 문자로 구성된 문자열 | System.String |
| dynamic | 동적 언어 어셈블리 연동용 동적 타입 | 고정 매핑되는 .NET 타입 없음 |
int = System.Int32, string = System.String은 본질적으로 완전 동일하며 컴파일러가 자동으로 상호 인식합니다.
코딩 규칙에서는 가독성 향상을 위해 반드시 C# 키워드(Int32 대신 int) 사용을 권장합니다.
단순 타입은 값 타입(Value Type)이라고도 부릅니다.
단일 값을 저장하며 스택 메모리에 할당됩니다.
선언 후 값을 직접 할당하지 않으면 표에 명시된 기본값이 자동 할당됩니다.
모든 단순 타입은 직접 object를 상속하며 박싱/언박싱 연산을 지원합니다. (뒤에서 다룸)
정수 계열 타입
u접두사가 붙은 타입(uint/ushort/ulong/byte): 부호 없음, 음수 저장 불가;- sbyte/short/int/long: 부호 있음, 양수 및 음수 정수 저장 가능.
부동소수점 계열 타입
float: 단정밀도, 접미사f. 정밀도는 낮지만 연산 속도가 빠르고 그래픽, 3D 연산에 적합;double: 배정밀도, 접미사d. 기본 부동소수점 리터럴 타입으로 범용 과학 연산에 사용;decimal: 고정밀 십진수, 접미사m. 금융, 통화 연산에 최적화되어 부동소수점 정밀도 손실이 발생하지 않음.
불린 타입과 문자 타입
bool: 두 가지 값만 존재하며 숫자와 암시적 형변환 불가;char: 단일 유니코드 문자를 저장하며 내부적으로는 16비트 부호 없는 정수로 처리됨.
비단순 타입 (참조 타입 Reference Type)
- object: 모든 타입의 최상위 기본 클래스로 모든 값 타입, 참조 타입이 상속하며 박싱 메커니즘의 핵심;
- string: 특수한 참조 타입으로 문자열은 불변 객체이며 빈 문자열
""는 유효한 기본 인스턴스; - dynamic: 컴파일 타임 타입 검사를 건너뛰고 런타임에서 멤버를 분석합니다. 고정 .NET 매핑이 없고 Python/Ruby 등 동적 언어 연동에 주로 사용하며 컴파일 안정성을 희생하는 대신 유연성을 확보.
static void Main(string[] args)
{
// 1. 8비트 정수
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. 16비트 정수
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. 32비트 정수
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. 64비트 정수
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. 부동소수점 타입
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. 불린 타입
bool flag = true;
// 7. 유니코드 문자
char ch = 'A';
// 8. 미리 정의 비단순 타입
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Code language: JavaScript (javascript)
내장 타입