C#을 포함한 모든 .NET 프로그래밍 언어는 .NET의 Common Type System에 정의된 .NET 데이터 타입을 사용함
C#은 int, double, string과 같은 C# 키워드로 데이터 타입을 표현할 수 있으며, 또한 System.Int32, System.Double, System.String 과 같은 .NET 데이터 클래스로 데이터 타입을 표현할 수도 있다
내부적으로는 C# 컴파일러는 C# 키워드로 된 데이터 타입을 컴파일 후 .NET 데이터 타입으로 변경하게됨
C# 데이터 타입 / .NET 데이터 타입
C# 리터럴 데이터
C# 코드에서 123, true, "ABC"와 같이 값을 직접 써줄 수 있는데, 이를 리터럴(Literal)이라 함
C#에서 리터럴 데이터를 사용할 때, 별도의 접미어 표시(Suffix)가 없는 경우 C# 컴파일러는 int, double, char, string, bool 데이터 타입에 기본적으로 그 값을 할당함
따라서, 특정 데이터 타입을 지정하고 싶으면, 리터럴 데이터 뒤에 1~2자의 타입 지정 접미어를 추가해야함
Suffix는 대소문자 구분이 없음 즉, decimal을 나타내는 접미어 M은 1024M 이나 1024m처럼 사용가능하다
디폴트 리터럴 타입
123 // int 리터럴
12.3 // double 리터럴
"A" // string 리터럴
'a' // char 리터럴
true // bool 리터럴
C# 데이터 타입 예제
// Bool
bool b = true;
// Numeric
short sh = -32768;
int i = 214783647;
long l = 1234L; // L suffix
float f = 123.45F; // F suffix
double d1 = 123.45;
double d2 = 123.45D; // D suffix
decimal d = 123.45M; // M suffix
// Char/String
char c = 'A';
string s = "Hello";
// DateTime 2011-10-30 12:35
DateTime dt = new DateTime(2011, 10, 30, 12, 35, 0);
최대값, 최소값
숫자형 데이터 타입의 최대값 혹은 최소값을 알아내기 위해서는 .NET 데이터 타입 클래스들의 MaxValue, MinValue 프로퍼티를 사용한다
C# 데이터 타입 키워드 뒤에서도 이러한 프로퍼티를 직접 호출할 수 있다
즉, int.MaxValue 혹은 Int32.MaxValue처럼 사용할 수 있다
int i = int.MaxValue;
float f = float.MinValue;
NULL
어떤 변수가 메모리 상에 어떤 데이터도 가지고 있지 않다는 의미로서 NULL을 사용하는데, NULL을 표현하기 위하여 C#에서는 소문자 null이라는 키워드를 사용함
모든 데이터 타입이 NULL을 가질 수 있는 것은 아니며, 사실 데이터 타입은 NULL을 가질 수 있는 타입(Reference 타입)과 가질 수 없는 타입(Value 타입)으로 구분될 수 있다
NULL을 가질 수 있는 문자열(string) 타입의 변수 s에 null을 할당하는 예
string s;
s = null;
Nullable Type
정수(int)나 날짜(DateTime)와 같은 Value Type은 일반적으로 NULL을 가질 수 없다
C# 2.0에서부터 이러한 타입들에 NULL을 가질 수 있게 하였는데, 이를 Nullable Type이라 부른다
C# 물음표(?)를 int나 DateTime 타입명 뒤에 붙이면 즉, int? 혹은 DateTime? 같이 하면 Nullable Type이 된다
이는 컴파일하면 .NET Nullable<T> 타입으로 변환된다
Nullable Type (예:int?)을 일반 Value Type(예:int)으로 변경하기 위해서는 Nullable의 .Value 속성을 사용한다
// Nullable 타입
int? i = null;
i = 101;
bool? b = null;
//int? 를 int로 할당
Nullable<int> j = null;
j = 10;
int k = j.Value;
출처) 예재로 배우는 C# 프로그래밍
'C#' 카테고리의 다른 글
[C#] 배열 (0) | 2024.05.13 |
---|---|
[C#] 변수 및 상수 (0) | 2024.05.13 |
[C#] 프로그래밍 언어 (0) | 2024.05.13 |
20240513 C# 기초 - 자료형 (0) | 2024.05.13 |
20240513 C# 구조이해 (0) | 2024.05.13 |