C#

C# [기본 자료형]

devrabbit22 2025. 5. 4. 02:47

자료형(Data Type)은 프로그램에서 데이터를 담을 수 있는 일정한 형식을 말하며, 기본 자료형(Built-in-Types)은 개발자가 별도로 코드를 만들지 않아도 C# 언어에서 자체적으로 제공하는 데이터 형식을 의미한다.

정수형 기본 타입

컴퓨터는 0과 1이라는 비트(bit)로 구성되어 이씩 때문에 오직 '숫자'만이 의미가 있다. 

컴퓨터 세상에서는 모든 것이 숫자인데, 알파벳조차 'A' = 65, 'B' = 64... 같은 식으로 각각 대응되는 숫자로 '약속'되어 있다.

비트가 표현하는 경우의 수로 인해 8비트는 2^8 = 256, 16비트는 2^16 = 65,536처럼 숫자 표현도 정해져 있다.

C#뿐만 아니라 일반적인 프로그래밍 언어에서 이러한 규칙은 공통적으로 적용되며, 데이터 자료형에 따라 비트를 나누는 구간도 일정하다.

C#의 정수를 담을 수 있는 자료 형식

sbyte -128~127 부호 있는 8비트 정수
byte 0 ~ 255 부호 없는 8비트 정수
short -32,768 ~ 32,767 부호 있는 16비트 정수
ushort 0 ~ 65,535 부호 없는 16비트 정수
int -2,147,483,648 ~ 2,147,483,647 부호 있는 32비트 정수
uint 0 ~ 4,294,967,295 부호 없는 32비트 정수
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 부호 있는 64비트 정수
ulong 0 ~ 18,446,744,073,709,551,615 부호 없는 64비트 정수

기본 타입 - 정수형

이렇게 분류한 이유?

저장 공간의 효율을 높이기 위해서이다.

각 상황에 맞게 쓸 수 있도록 자료형이 준비되어 있는 것이라고 생각하면 된다.

자료형의 크기가 다르다.

변수라는 이름을 사용해 개발자가 원하는 정수형 저장소를 만들 수 있고, 여기에 값을 담아 자유로운 연산이 가능하다.

이렇게 사용할 변수를 코드로 나타내는 것을 '변수를 선언한다.'라고 표현한다.

변수명과 함께 값을 지정하는 것이 가능하고, 값을 지정하지 않다가 이후에 값을 지정하는 것도 가능하다.

프로그램이 수행되는 동안 값을 바꿔서 넣는 것도 허용된다.

변수명에 값을 넣는 경우 해당 데이터 타입의 범위 내에 있는 숫자만 넣을 수 있다.

ex) int형 변수 값에 int 형의 범위를 넘는 값을 넣으면 컴파일 할 때 에러가 발생한다.

 

C#의 자료형은 사실상 C#에만 국한된 것은 아니다.

닷넷에서 제공되는 타입이며, C#은 그러한 타입에 대한 별도의 명칭을 예약어로 추가한 것이다.

 

C#과 닷넷에서 제공되는 타입의 대응 관계

C# 대응되는 .NET 형식
sbyte System.Sbyte
byte System.Byte
short System.Int16
ushort System.Uint16
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
없음 System.Int128
System.UInt128

.NET의 기본 타입에 대한 C#의 별칭

실수형 기본 타입

실수형 역시 C#에만 있는 것은 아니고 대부분의 프로그래밍 언어에서 제공된다.

C#에서는 .NET을 기반으로 세 가지 실수 타입을 제공한다.

C# 대응되는 .NET 형식 근사 범위 크기
float System.Single ±1.5 × 10⁻⁴⁵ ~ ±3.4 × 10³⁸ 4바이트
double System.Double ±5.0 × 10⁻³²⁴ ~ ±1.7 × 10³⁰⁸ 8바이트
decimal System.Decimal ±1.0 × 10⁻²⁸ ~ ±7.9 × 10²⁸ 16바이트

기본타입 - 실수형

float과 double 간의 선택 기준은 정밀도의 차이에 불과하지만, decimal의 경우 반올림 오차가 허용되지 않는 회계 계산에 적합하다. 선택의 기준을 간단하게 제시하면, 소수점이 있는 연산을 할 때는 일반적으로 double을 사용한다. 

하지만 빠른 처리 속도가 필요한 곳에서 연산 값이 4바이트 단정도 실수로도 충분하다면 float을 사용할 수 있다.

통화와 관련된 계산이라면 decimal을 사용하도록 바꾸면 된다.

 

값을 표기할 때 한가지 유의할 점

정수형과 달리 특별한 접미사가 사용될 수 있다.

float 형식의 값은 숫자 값 다음에 f를 붙여야 하며, decimal의 경우에는 소수점을 포함하는 경우 m을 붙여야 한다.

문자형 기본 타입

문자 및 문자열과 관련해서 C#에서는 다음의 두 가지 타입을 제공한다.

C# 대응되는 .NET 형식 범위 설명
char System.Char U+0000 ~ U+FFFF 유니코드 16비트 문자
string System.String 문자열 유니코드 문자열

char는 표현할 수 있는 범위의 수를 놓고 보면 '부호 없는 16비트 정수'인 System.UInt16과 같지만, ushort가 수를 담기 위한 타입으로 정해져 있는 반면 char는 문자를 담기 위한 타입으로 약속되어 있다.

문자는 숫자와 달리 '(작은 따옴표)'를 사용해 표현한다.

char는 ushort와 비트(bit)상으로는 16비트(0 ~ 0xFFFF)로 동일하지만, 사칙 연산(+, -, *, /)을 하는 경우 컴파일할 때 오류가 발생한다. 이것은 문자와 문자를 더하거나 빼는 것이 논리적으로 적합하지 않기 때문인데, 바로 이러한 차이 덕분에 정수를 담을 때는 ushort를 사용하고, 문자를 담을 때는 char을 사용한다.

 

유니코드(Unicode)는 다국어 지원을 위한 문자 집합이다. 전 세계의 모든 문자를 표현하기 위해 설계된 산업 표준으로, 프로그램을 유니코드 기반으로 만들면 운영체제의 언어 설정에 상관없이 동일한 문자를 출력할 수 있다. 물론 대상 운영체제에 유니코드에 대응되는 폰트(Font)가 설치되어 있어야 한다.

 

편집기에서 키보드로 입력할 수 없는 문자를 표현하기 위하 특별하게 이스케이프 시퀸스(escape sequence)라는 표현을 쓸 수 있다.

이스케이프 시퀸스란 \(역슬래시, back-slash)로 시작하는 특수 문자 표현으로서 일반적인 문자로는 표현할 수 없는 영역의 문자를 나타낼 때 사용된다. Console.WriteLine은 Console.Write 출력에 \n 문자를 덧붙여서 출력하는 것과 같다.

\t, \n 이외에 자주 쓰는 이스케이프 시퀸스로는 작은따옴표를 표시하기 위한 \'표현이 있다. 작은 따옴표는 문자형 데이터 값을 표현하는데 이미 사용되고 있기에 명시적으로 구분하기 위해 역슬래시를 통해 이스케이프 시퀸스로 나타낼 수밖에 없다.

일부 편집기에서 \문자는 한글 윈도우의 경우 ₩문자로 대체되어 표시되기도 한다.

 

키보드로 입력할 수 없는 유니코드 문자를 나타내는 데 이스케이프 시퀸스를 사용하기도 한다. 이러한 경우 역슬래시와 함께 u 문자를 사용해 해당 유니코드 문자의 번호를 16진수로 명시한다.

 

\문자를 화면에 출력하려면 \\와 같이 두 개의 역슬래시 문자로 표현하면 된다.

 

문자가 둘 이상인 경우, 이는 별도로 '문자열'이라고 하며 string 타입에 대응된다. 문자열 값을 표현할 때는 "(큰 따옴표)를 사용하고 코드론는 다음과 같이 나타낸다.

 

문자열에서도 char에서 사용했던 이스케이프 시퀸스를 그대로 포함할 수 있다.

 

char 형의 작은 따옴표 문제와 마찬가지로 문자열에서 큰 따옴표를 데이터로 포함시킬 때도 이스케이프 시퀸스를 사용한다.

 

문자열에 \문자를 포함하려면 char에서와 마찬가지로 두 번 연속으로 사용하는 방법도 가능하지만, @ 문자를 문자열 앞에 붙이면 내부에 있는 \를 이스케이프 시퀸스로 간주하지 않고 순수하게 문자로 취급할 수 있다. - C#11에서는 UTF-8 문자열과 원시 문자열 유형을 추가로 제공한다.

 

char형과 달리 string은 + 연산을 지원하며 이 연산자를 이용해 문자열을 연결할 수 있다.

 

불린(boolean)형 기본 타입

C#에는 bool이라는 자료형이 있으며, 오직 true, false 값만 담을 수 있다.

C# 대응되는 .NET 형식 범위
bool System.Boolean true, false

기본 타입 - 불린형

대체로 bool 자료형은 if문이나 while문 등에 평가식으로 사용되거나 참/거짓에 해당하는 자료를 표현할 때 사용된다.


모든 프로그램 언어가 명시적으로 '자료형'을 선언하고 사용하는 것은 아니다. 동적 타입 언어에 속하는 프로그래밍 언어는 타입을 명시하는 부분이 없는데, 곧바로 사용하는 것이 가능하다.

n = 50
text = "Hello World"

C#은 정적 타입 언어이기 때문에 반드시 자료형을 명시해야 한다.

int n = 50;
string text = "Hello World";

비교해보면 동적 타입 언어의 사용법이 간단하다. 이런 차이가 발생하게 된 이유 - 기억 장소를 효율적으로 사용하기 위해 나타난 차이에 불과하다.

동적 타입 언어는 세밀하게 해당 자료형의 바이트 수를 제어할 수 없기 때문에 필요 이상으로 저장 공간을 사용한다는 단점이 있다.

이런 문제점은 최근에 출시되는 컴퓨터가 고용량화/고속화 되면서 점차 부각되지 않게 되었다.


Reference

시작하세요! C# 12 프로그래밍 기본 문법부터 실전 예제까지