C#

자료형

전라남도교육지원청 2022. 2. 6. 13:12

정수 자료형

자료형 설명 범위 크기
byte 부호 없는 정수 0~255 8bit
sbyte 정수 -128~127 8bit
short 정수 -32,768~32,767 16bit
ushort 부호 없는 정수 0~65,535 16bit
int 정수 -2,147,483,648~2,147,483,647 32bit
uint 부호 없는 정수 0~4,294,967,295 32bit
long 정수 -922,337,203,685,477,508~922,337,203,685,477,507 64bit
ulong 부호 없는 정수 0~18,446,744,073,709,551,615 64bit
char* 유니코드 문자   16bit

*char 형식은 단일 문자를 정수 형태로 표현함

 

부동 소수점 형식

자료형 설명 범위 크기
float 단일 정밀도 -3.402823e38~3.402823e38 32bit
double 복수 정밀도 -1.79769313486232e308~1.79769313486232e308 64bit

 

실수 형식

자료형 설명 범위 크기
decimal 29자리 소수 ±1.0×10e-28~±7.9×10e28 128bit

 

문자 형식

자료형 설명    
char 단일 문자 'a' 와 같이 작은 따옴표로 문자를 묶어서 표현  
string 문자열 "abc" 와 같이 큰 따옴표로 문자열을 묶어서 표현  

 

논리 형식

자료형 설명 범위 크기
bool 논리 형식 true, false 8bit

 

추가

 

BigInteger

long 형식은 이미 큰 정수를 표현할 수 있지만 최대값에 가까운 값들끼리 연산을 하다보면 오버플로우로 인한 예외가 발생하기도 한다. 이럴 때에는 더 큰 값을 처리할 수 있는 형식이 필요하다. 새로운 데이터 형식을 작성해서 사용할 수도 있지만 C#에서는 BigInteger 클래스를 지원하고 있다.

using System;
using System.Numerics;

class program
{
    static BigInteger a = new BigInteger();
    static long b = long.MaxValue;
    static void Main()
    {
        // a = 10000000000000000000000; 컴파일 에러
        a = BigInteger.Parse("10000000000000000000000");
        Console.WriteLine(a);
        Console.WriteLine(b);
    }
}
// 결과
// 10000000000000000000000
// 9223372036854775807

BigInteger 형식을 사용할 때에는 System.Numerics 참조를 꼭 더해주어야한다. 그리고 왜인지 큰 정수를 직접 저장하려고 하면 컴파일 에러가 발생하고 "문자열"상태의 큰 정수를 BigInteger.Parse( ) 메소드를 사용해서 변환해주어야한다. 이 형식은 정수 범위 안에서 표현 범위의 제한이 없기 때문에 매우 큰 정수끼리의 연산이 가능하다.

 

StringBuilder

String 형식은 한 번 저장한 데이터를 수정할 수 없다. 따라서 데이터를 새로 지정 때마다 새로운 메모리 공간을 사용한다. 하나의 string에 데이터를 여러번 덮어 씌우게 되면 메모리 사용량이 굉장히 커지고 처리 시간도 급격히 길어진다. StringBuilder 클래스는 문자열을 새로 저장할 때 내부 버퍼 값을 변경하기 때문에 새로운 공간을 할당하지 않아도 된다. 수정 가능한 문자열이기 때문에 문자열을 여러번 변경하는 프로그램을 작성할 때에는 이 클래스를 이용하는 것이 메모리 관리에 유리하다.

using System;
using System.Text;

class program
{
    static StringBuilder sb = new StringBuilder();	// 인스턴스 생성
    static float a = 1.2345f;
    static void Main()
    {
        sb.AppendLine(a.ToString());
        // float 형식을 암시적으로 변환할 수 없기 때문에 ToString() 메소드를 사용한다.
        Console.Write("float data a = " + sb);
        // string 형식처럼 자유롭게 입출력이 가능하다.
    }
}
// 결과
// float data a = 1.2345

String은 단일 문자의 배열과 같기 때문에 index를 활용한 단일 문자 표현도 가능하지만 StringBuilder에서는 이게 불가능하다. StringBuilder에서 이 기능을 사용하려면 ToString( )메소드를 사용해 String 형식으로 바꿔주어야한다. 메모리 면에서 String보다 효율이 높지만 너무 큰 데이터를 저장하면 메모리 초과 예외가 발생한다.