1. 강좌 목표


- C# 자료형에 대해 알아보기

- 출력을 통한 값의 범위 알기


2. 실습


지난 강좌에서 배운 출력 방법으로 자료형에 대해 알아보도록 하겠습니다.

C# 에서는 크게 2가지의 자료형으로 나누어집니다. 


Value(값)

값 형식은 변수가 값을 담는 데이터 형식이고 타입은 struct 형으로 되어있습니다.

struct는 프로그래밍 언어에서 구조화 된 데이터를 처리 할때 사용하는 구조체이다.

(하나의 제품으로 치자면 이미 완성되어 있는 완제품)


Reference(참조)

참조 형식은 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식이고 타입은 class 형으로 되어있습니다.

(하나의 제품으로 치자면 변경이 가능한 제품)


이제 코드를 써보면서 데이터 형식과 크기(Byte) 담을 수 있는 값의 범위를 알아보도록 하겠습니다.

코드작성에 앞서 Console.WriteLine에 대해 좀더 알아보고 넘어가도록 하겠습니다.

Console.WriteLine 다음 소괄호 안에는 여러가지 데이터형이 들어갈수 있도록 이미 System 네임스페이스안에

Console이라는 클래스에 WriteLine 이라는 함수로 여러가지 데이터형을 쓸수있겠금 정의되어 있습니다.

아래 사진과 같이 코드를 작성할때 소괄호 ( 를 타이핑하면 들어갈수 있는 매개변수들의 도움말이 나타납니다.

키보드의 방향키 ↑와 ↓키로 해당내용을 볼수도 있습니다.





using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
		int a = 10;
                Console.WriteLine(a);
		Console.WriteLine("int 형 Max : {0} ~ Min : {1} size : {2}byte",  int.MaxValue, int.MinValue,sizeof(int));
        }
    }
}

결과

10
 int 형 Max : 2147483647 ~ Min : -2147483648 size : 4byte


결과의 첫번째 라인은 정수 10

두번째 라인은 int라는 데이터형식의 최대값의 범위와 최소 값의 범위 데이터형식의 크기값 까지 출력 되었습니다.

어떻게 이러한 결과가 나왔는지 하나하나 살펴보도록 하겠습니다.



데이터 형식과 변수명을 선언하고 값 할당하기

1. [자료형] [변수명];

   [변수명] = [값 할당];

int a;
a = 10;


2. [자료형] [변수명] = [값 할당];

int a = 10;


값 형식의 int라는 자료형에 변수 a10이라는 숫자를 대입해 놓고 이것을 Console.WriteLine 메서드를 이용해

Console.WriteLine(a); 처럼 a라는 변수를 넣어 주면서 변수의 자료형에 맞는 출력을 해주는 것 입니다.

※데이터 형식의 종류와 크기 값의 범위등은 아래 <데이터 형식 표>를 참고해 주세요.


두번째 Console.WriteLine 메서드의 사용방법으로는 아래의 형태로 "문자열 내용" 안에 {0} 이나 {1} 처럼 중괄호안에 인덱스가 

들어 있는 형태를 서식 항목이라 하는데 인덱스는 0부터 시작하며 줄 종결자 , 다음으로 오는 순서대로 서식 항목과 치환되어 출력 됩니다.


결과

문자열aaa 문자열bbb


위의 방법처럼 Console.WriteLine의 메서드와 int 데이터 형식에 키워드인 const로 정의된 상수 int.MaxValue, int.MinValue


형식의 크기를 가져오는 연산키워드 sizeof() 를 활용하여 다른 데이터형식의 선언과 값의 할당 데이터의 크기를 확인해 보세요.


 데이터 형식

구분

분류

크기(Byte)

값의 범위 

 byte

 부호없는 정수

 값(struct)

 1(8bit)

 0~255

 sbyte 

 정수

 값(struct)

 1(8bit)

 -128~127

 short 

 정수

 값(struct)

 2(16bit)

 -32,768~32,767

 ushort 

 부호없는 정수

 값(struct)

 2(16bit)

 0~65535

 int 

 정수

 값(struct)

 4(32bit)

 -2,147,483,648~2,147,483,647

 uint

 부호없는 정수

 값(struct)

 4(32bit)

 0~4,294,967,295

 long 

 정수

 값(struct)

 8(64bit)

 -922,337,203,685,477,508~922,337,203,685,477,507

 ulong

 부호없는 정수

 값(struct)

 8(64bit)

 0~18,446,744,073,709,551,615

 char

 문자

 값(struct)

 2(16bit)

 

 float

 실수

 값(struct)

 4(32bit)

 -3.402823e38~3.402823e38

 double

 실수

 값(struct)

 8(64bit)

 -1.79769313486232e308~1.79769313486232e308 

 decimal

 실수

 값(struct)

 16(128bit)

 -79228162514264337593543950335~79228162514264337593543950335

 bool

 논리

 값(struct)

 1(8bit)

 true, false

 string

 문자열

 참조(class)

 

 

 object

 객체

 참조(class)

 

 

<데이터 형식 표>


소스코드

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            Console.WriteLine("int 형 Max : {0} ~ Min : {1} size : {2}byte", int.MaxValue, int.MinValue, sizeof(int));
            Console.WriteLine(a);

            uint b = 10;
            Console.WriteLine("uint 형 Max : {0} ~ Min : {1} size : {2}byte", uint.MaxValue, uint.MinValue, sizeof(uint));

            short c = 10;
            Console.WriteLine("short 형 Max : {0} ~ Min : {1} size : {2}byte", short.MaxValue, short.MinValue, sizeof(short));

            ushort d = 10;
            Console.WriteLine("ushort 형 Max : {0} ~ Min : {1} size : {2}byte", ushort.MaxValue, ushort.MinValue, sizeof(ushort));

            long e = 10;
            Console.WriteLine("long 형 Max : {0} ~ Min : {1} size : {2}byte", long.MaxValue, long.MinValue, sizeof(long));

            ulong f = 10;
            Console.WriteLine("ulong 형 Max : {0} ~ Min : {1} size : {2}byte", ulong.MaxValue, ulong.MinValue, sizeof(ulong));

            byte g = 10;
            Console.WriteLine("byte 형 Max : {0} ~ Min : {1} size : {2}byte", byte.MaxValue, byte.MinValue, sizeof(byte));

            sbyte h = 10;
            Console.WriteLine("sbyte 형 Max : {0} ~ Min : {1} size : {2}byte", sbyte.MaxValue, sbyte.MinValue, sizeof(sbyte));

            char i = 'A';
            Console.WriteLine("char 형 size : {0}byte", sizeof(char));

            float j = 1.41421356237f;
            Console.WriteLine("float 형 Max : {0} ~ Min : {1} size : {2}byte", float.MaxValue, float.MinValue, sizeof(float));
            Console.WriteLine("{0}", j);

            double k = 1.41421356237d;
            Console.WriteLine("double 형 Max : {0} ~ Min : {1} size : {2}byte", double.MaxValue, double.MinValue, sizeof(double));
            Console.WriteLine("{0}", k);

            decimal l = 10m;
            Console.WriteLine("decimal 형 Max : {0} ~ Min : {1} size : {2}byte", decimal.MaxValue, decimal.MinValue, sizeof(decimal));

            bool m = false;
            Console.WriteLine("bool 형 size : {0}byte", sizeof(bool));

            object obj = null;
            string str = "";
        }
    }
}
결과

int 형 Max : 2147483647 ~ Min : -2147483648 size : 4byte

10

uint 형 Max : 4294967295 ~ Min : 0 size : 4byte

short 형 Max : 32767 ~ Min : -32768 size : 2byte

                               .

                               .

                               .











주의사항

1. 실수의 변수 선언 및 값 할당시 C#컴파일러는 기본적으로 double형으로 인식을 합니다. 그래서 실수형을 사용시 접미사

   float ( f ), double ( d ), decimal ( m )를 붙여 정확히 사용하여야 합니다.


2. 편의를 위해서 형식이 맞지 않는 값으로 변환을 하였을때 생기는 문제점들 입니다.

   컴파일러에서는 문제를 발생하지 않았지만 결과 값과 같이 데이터 손실로 인해 의도치 않은 버그를 유발하기도 합니다.

            double a = 1.23456789123456d;
            float b = (float)a;
            int c = (int)b;
           
            Console.WriteLine("double : {0}", a);
            Console.WriteLine("float : {0}", b);
            Console.WriteLine("int : {0}", c);
결과

double : 1.23456789123456

float : 1.234568

int : 1






다음 강좌에서는 기본 연산자 및 분기문 대해 알아보도록 하겠습니다.

+ Recent posts