C#과 C/C++ 은 사용하는 자료형이 다소 다르다.

비슷한 부분이 많지만, 약간의 다른 부분이 있기 때문에 알아둬야 한다.

 

먼저, C#에서 사용하는 기본 자료형의 종류를를 알아보자.

 

정수형

자료형 형식 크기, 저장 방식 범위
sbyte System.Sbyte 8bit (1byte) 
부호 있는 정수
-128 ~ 127
byte System.Byte 8bit (1byte)
부호 없는 정수
0 ~ 255
short System.Int16 16bit (2byte)
부호 있는 정수
-32,768 ~ 32,767
ushort System.UInt16 16bit (2byte)
부호 없는 정수
0 ~ 65,535
int System.Int32 32bit (4byte)
부호 있는 정수
-2,147,483,648 ~ 2,147,483,647 
uint System.UInt32 32bit (4byte)
부호 없는 정수
0 ~ 4,294,967,295
long System.Int64 64bit (8byte)
부호 있는 정수
-9,223,372,036,854,775,808 ~ 
 9,223,372,036,854,775,808 
ulong System.UInt64 64bit (8byte)
부호 없는 정수
0 ~ 18,446,744,073,709,551,615

실수형

자료형 형식 크기, 저장 방식 범위
float System.Single 32bit (4byte)
부호 있는 실수
(부동 소수점)
±1.5e-45 ~ ±3.4e38
double  System.Double 64bit (8byte)
부호 있는 실수
(부동 소수점)
±5.0e-324 ~ ±1.7e308
decimal System.Decimal 126bit (16byte)
부호 있는 실수
(고정 소수점)
±1.0 × 1028  ±7.9 × 1028

문자형

자료형 형식 크기, 저장 방식 범위
char System.Char 16bit (2byte)
유니코드 문자
U+0000 ~ U+FFFF
string System.String 가변적인 크기
유니코드 문자열
 

논리형

자료형 형식 크기, 저장 방식 범위
bool System.Boolean 8bit (1byte) true, false

 

자료형과 형식

위의 표를 보면, 자료형과 형식을 나눠서 설명하고 있다.

코드를 작성하면 아래와 같이 자료형대로 선언할 수도 있고, 형식대로 선언할 수도 있다.

아래 그림과 같이 자료형에 마우스를 대보면, uint도 System.UInt32라는 구조체로 나오고 System.UInt32도 동일하게 나온다. 둘은 실제로 동일한 기능을 하는 것이다.  System.UInt32위에 마우스를 대면 이름을 단순화 할 수 있다는 경고 표시가 뜬다. uint로 쓰나, System.UInt32로 쓰나 기능은 어차피 똑같으니까 더 짧은 uint를 쓰라는 의미인 듯 하다.

굳이 누가 진짜인지를 따지자면, System.UInt32가 본래 이름이고, uint가 별칭이다.

이렇게 기본 자료형에도 다양한 멤버함수가 포함되어 있어서 편하게 프로그래밍을 할 수 있다.

부동 소수점, 고정 소수점

위의 표를 보면, 실수를 표현하는 자료형은 float, double, decimal 총 3가지가 있다.

보면, float과 double는 부동 소수점 방식이지만, decimal은 고정 소수점 방식이다.

 

부동 소수점과 고정 소수점을 이 게시글에서 자세하게 설명하진 않을 것이다.

다만, 간단한 차이는 알고 가자.

 

고정 소수점 방식은 부동 소수점 방식에 비해 정밀하게 소수를 표현할 수 있지만, 부동 소수점 방식에 비해 표현할 수 있는 범위가 적다. 

 

반면 부동 소수점 방식은 고정 소수점 방식에 비래 넓은 범위를 표현할 수 있지만, 고정 소수점 방식 보다 정밀하지 않다.

 

고정 소수점 방식의 표현 범위를 넓히기 위해선, 메모리 공간 자체를 크게 할당해야 한다. 그렇기 때문에 C#에서 사용하는 고정 소수점 방식의 실수 자료형인 decimal은 16byte라는 어마어마한 크기를 차지하고 있는 것이다. decimal은 정밀한 연산에 사용할 수 있지만, 메모리를 많이 차지하고 연산 속력 또한 float, double에 비해 느리다.

 

금융, 시뮬레이션 등의 정밀한 소수 계산이 필요한 상황이 아니라면 float, double로도 충분하기 때문에 가능하다면 float과 double를 사용하는 것이 성능상 좋을 것이다.

 

문자형

C++에선 아스키코드로 문자를 저장하는 char와 unsigned char가 있다. 반면, C#은 아스키코드로만 처리하는 자료형은 따로 없고, 모든 문자를 유니코드로 처리한다.

 

char은 'A' 와 같이 문자 하나를 저장할 때 사용한다. 유니코드 방식이기 때문에 '김', '최' 등의 한글도 저장할 수 있다.

string은 문자열을 저장하는 타입이다. std::wstring과 비슷하다고 보면 된다.

'C# > C#' 카테고리의 다른 글

C# - const, readonly  (0) 2024.08.10
C# - is, as 연산자  (0) 2024.08.07
C# - 클래스, 접근 제한 지정자, 프로퍼티  (0) 2024.07.27
C# - 클래스와 콘솔 출력  (2) 2024.07.24
C# - C#과 .NET 프레임워크  (2) 2024.07.23

+ Recent posts