본문 바로가기

프로그래밍/C#

[C#] C# 데이터타입 - 값형식

C# Data Type 1 - 값형식에 대하여 공부해 보겠습니다.



Data Type

프로그램은 수 많은 데이터의 입력과 연산, 그 결과의 출력이 일어나게 됩니다.
이러한 작업을 하기 위하여 각 데이터에 맞는 형식을 지정하고 연산 등의 작업을 하게 되는 것입니다.

Ex) 저의 나이를 나타낼 경우 "25"와 같이 숫자로 표현도 가능하지만 문자로 "스물다섯" 이라고 표현하기도 합니다.
하지만 컴퓨터는 숫자인지 문자인지 모르기 때문에 기본적으로 지정을 해주어야 합니다

요약) 나이를 나타낼때 사람은 25, 스물다섯 하면 되지만,
       컴퓨터는 숫자인지 문자인지 따로 지정을 해야 알아듣는다.


C#에서 지원하는 데이터 형식

구분 

형식 

크기(Bit) 

범위 

 정수-

signed

sbyte

8

 -128 ~ 127

short 

16 

 -32,768 ~ 32,767

int 

32 

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

long 

64 

 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 정수-

unsigned

byte 

  0 ~ 255

ushort 

16

  0 ~ 65,535

uint 

32

  0 ~ 4,294,967,295

ulong 

64

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

 실수

 float

32

  ±1.5e-45 ~ ±3.4e38

double 

64

  ±5.0e-324 ~ ±1.7e308

decimal 

128 

  (-7.9 x 1028 - 7.9 x 1028) / (100 - 28)

문자 

char 

16

(Unicode) 

  U + 0000 ~ U + ffff

 Boolean

bool 

 1

  true, false




Data Type 실습 - 1. 일반 형식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _160815_01_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            /* int형 실습 */
            int number1 = 123;
            System.Int32 number2 = 1234/* .NET Framework식 int표현(똑같음) */
            Console.WriteLine("number1: {0}", number1);
            Console.WriteLine("number2: {0}", number2);
 
            /* double형 실습 */
            double number3 = 123D;
            double number4 = 12;
            Console.WriteLine("number3: {0}", number3);
            Console.WriteLine("number4: {0}", number4);
        }
    }
}
cs

실습 코드이며, 설명은 주석으로 달았습니다



실행 화면입니다.

number2는 .NET Framework식 선언이며 C#에도 사용가능함을 확인할 수 있습니다.

number3은 실수형 double로 선언해서 D가 출력되지 않았음을 확인할 수 있습니다.




Data Type 실습 - 2. 열거형

열거형은 사용자 정의된 숫자형식의 명칭으로 접근하거나 숫자로 형변환이 가능하다. 열거형은 특별한 설정이 없으면 선언된 명칭 순서대로 0부터 차례대로 내부적인 값을 가지며, enum예약어를 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _160815_01_DataType_Enumeration
{
    /* 열거형 선언 */
    public enum Country { Korea, China, Japan } /* Korea = 0, China = 1, Japan = 2 
                                                   으로 자동설정*/
    class Program
    {
        static void Main(string[] args)
        {
            Country location1 = Country.Korea; /* Country안에 Korea를 location에 저장합니다 */
            Country location2 = (Country)1/* emum Country의 1번은 China */
            int location3 = (int)location1; /* 정수형으로 저장 */
 
            Console.WriteLine("location1: {0}", location1);
            Console.WriteLine("location2: {0}", location2);
            Console.WriteLine("location3: {0}", location3); /* 정수형을 출력하게 됩니다. */
            Console.WriteLine("location(Country): {0}", (Country)location3);
            /* 정수형 location3을 가져오는데 
            3번째 콘솔과 다른점은 (Country)를 넣어서 Country를 사용하여 
            location3을 불러온다는 점입니다 */
cs

열거형 실습 코드와 설명입니다.



실행 화면입니다.

유심히 봐야할 구간은 3번째와 4번째 라인입니다.


코드상에선 location3이냐 (Country)location3)이냐 차이입니다.

정수형으로 선언했지만 정수형으로 받아와 숫자를 출력하느냐 문자를 출력하느냐 차이입니다.




Data Type 실습 - 3. Nullable형식

int와 같은 형식은 기본적으로 null값을 가질 수 없습니다.
하지만 DB와 연동을 하는 경우엔 DB에서 null값을 사용하기 때문에
MS SQL에서 ISNull()함수를 통하여 기본값을 지정하는 처리를 하였습니다
이렇게 해서 C#3.0에서 불편함을 해소하고 DB와의 유연한 처리가 가능하도록 값형식에서도 null값을 사용할 수 있게 됐습니다.

값형식에 null이 가능하도록 하려면 해당 형식선언 다음에 ?를 붙여주면 됩니다.
Nullable형식은 내부적으로 System.Nullable <T> 구조체의 인스턴스로 HasValueValue라는 두개의 프로퍼티를 가지고 있습니다.

- HasValue: 값이 null이면 false  /  null이 아니면 true
- Value: HasValue가 true일때 가지고 있는 값을 반환
    false일 경우 InvalidOpertionException예외가 발생


실습은 2가지경우를 예로 들겠습니다. 숫자를 입력하여 값을 판별할 수 있는 경우도 있지만 기본개념을 잡는 경우라서 일반숫자, null값 2가지를 수동으로 바꿔서 확인하겠습니다


일반 숫자일 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _160815_01_Nullable
{
    class Program
    {
        static void Main(string[] args)
        {
            /* null이 선언 가능하도록 '?'를 붙여줌 */
            int? number = null;
            number = 10/* number안에 10을 넣어줌 */
 
            /* HasValue는 null일경우 false, null이 아니면 true */
            if (number.HasValue)
            {
                /* Value는 HasValue가 true여야 가지고 있는 값을 반환 */
                Console.WriteLine(number.Value);
                /* 즉 null이 아니여야 값을 반환한다는 뜻임 */
            }
            else
            {
                Console.WriteLine("값이 null입니다.");
            }
        }
    }
}
 
cs
코드와 코드 설명입니다.

number에 10을 넣어줬기 때문에 10을 출력합니다.


null값을 넣은경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _160815_01_Nullable
{
    class Program
    {
        static void Main(string[] args)
        {
            /* null이 선언 가능하도록 '?'를 붙여줌 */
            int? number = null;
            number = null/* number안에 null을 넣어줌 */
 
            /* HasValue는 null일경우 false, null이 아니면 true */
            if (number.HasValue)
            {
                /* Value는 HasValue가 true여야 가지고 있는 값을 반환 */
                Console.WriteLine(number.Value);
                /* 즉 null이 아니여야 값을 반환한다는 뜻임 */
            }
            else
            {
                Console.WriteLine("값이 null입니다.");
            }
        }
    }
}
 
cs

코드와 설명입니다

유심히 보셔야 할 점은 number = null; 입니다

number에 숫자대신 null을 넣어줬습니다


null값이 들어왔기 때문에 null이라고 출력해줍니다.



?를 지우고 null값을 넣었을 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _160815_01_Nullable
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = null/* ?를  */
            number = null
 
            /* HasValue는 null일경우 false, null이 아니면 true */
            if (number.HasValue)
            {
                /* Value는 HasValue가 true여야 가지고 있는 값을 반환 */
                Console.WriteLine(number.Value);
                /* 즉 null이 아니여야 값을 반환한다는 뜻임 */
            }
            else
            {
                Console.WriteLine("값이 null입니다.");
            }
        }
    }
}
 
cs

number에서 ?만 지웠습니다


실행해보니 오류가 났습니다.

즉 정수형으로 선언할때 null값을 사용하고 싶으면 변수명 옆에 '?'를 반드시 붙여야 함을 확인할 수 있습니다.