'C#/Data Type'에 해당되는 글 2건

  1. 2018.02.02 C#. DataType-Nullable
  2. 2018.02.02 C#. DataType

[ C#. DataType-Nullable ]



1. Nullable 형식

   int와 같은 값 형식은 기본적으로 null 값을 가질 수 없다. 

   하지만 DB와 연동을 하는 프로그램을 개발 하다 보면, 

   DB에서는 모든 형식에 null이 가능하다. 

   보통은 DB에서 쿼리를 작성할 경우 Microsoft SQL Server에서는 

   ISNull() 함수를 통하여 기본값을 지정하는 처리를 하였다. 

   C# 3.0 에서 이러한 불편함을 해소하고 

   DB와의 유연한 처리가 가능하도록 값형식에서도 null 값을 사용할 수 있게 되었다.


   값 형식에 null이 가능하도록 하려면 해당 형식선언 다음에 ?를 붙여 주면 된다.

   Nullable 형식은 내부적으로 System.Nullable<T> 구조체의 인스턴스로 HasValue와 Value 라는 

   두 개의 프로퍼티를 가지고 있다.


2. HasValue : 값이 null 이면 false, null이 아닌 값이면 true

   Value    : HasValue가 true 이면 가지고 있는 값을 반환하며, 

              HasValue가 false 일 경우 InvalidOperationException 예외가 발생한다.


   Nullable 형식은 유연성은 확보 할 수 있으나, 

   널 형식을 허용하지 않은 명시적 선언 보다는 오버헤드가 발생하므로 

   꼭 필요한 경우에만 사용을 해야 한다.(DB와 연동하는 처리에는 유용할 것이다.)   


3. ?? 연산자

   설정된 데이터를 연산을 할 경우 null로 설정이 되어 있으면 올바른 사칙연산을 이루어 지지 않는다. 

   그러므로 DB의 IsNull() 함수와 같이 null 일 경우 기본값 설정이 필요하다. 

   C#에서 단일 행으로 조건식을 판단할 수 있는 ?: 연산지 이외에 특별히 ?? 연산자를 통해 쉽게 처리 가능하다.


4. 예)

   - int? numA = null;

     int numB = (numA == null) ? 0 : (int)numA)

     int numC = numA ?? 0;




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

C#. DataType  (0) 2018.02.02
Posted by 농부지기
,

C#. DataType

C#/Data Type 2018. 2. 2. 13:33

[ C#. DataType ]


1. 데이터 형식 종류

   - 숫자형

   - 구조체(struct)

   - 열거형(enum)과 같은 값 형식

   - 문자열

   - 클래스


2. 값 형식(Value Type)

   - 숫자형 : sbyte, short, int, long, byte, ushort, uint, ulong, float, double, decimal

   - bool

   - char

   - struct

   - enum 등


3. 참조 형식(Reference Type)

   - string

   - object

   - class 등


4. 형식(Value Type)

  - 닷넷에서 문자는 한글/영문 구분 없이 모든 한 문자는 16비트 유니코드 문자이다

  - C#에서 형식을 선언할 때  C#형식 혹은 System 네임스페이스에 있는 

    닷넷 프레임워크 형식으로 표현이 가능하다. 

    이 둘간의 차이점은 C# 표현은 닷넷 프레임워크 형식 표현의 별칭이다. 

    닷넷 초기 이 둘간의 표현 방법이 어느 것이 좋으며, 

    성능상에 유리한지에 대해 의견이 분분한적이 있다.

    결론적으로 각 언어 별로 예전부터 형식에 대해 표현해 오던 방식이 있으며, 

    좀더 간략히 표현하는 것일 뿐 성능상의 차이는 존재하지 않는다. 



1. Type

    1. int, string, char, bool, double, 상수

    2. double = 3.141592;

    3. const double PI = 3.14

    4. string[] ages = new String[] {"10", "30", "40", "50"};

        int[] n = new int[100];

        int len = ages.Length;

        method인자 ( static voic method_name(int[] arr) { ... } 

 

        string[,] arr = new string[,] { {"김씨","32"}, {"이씨", "13"), {"최씨", "52"}};


2.열거형

   a. 선언 

      enum CalcType

      {

            Add = 1,

            Substract,

            Multiply,

            Devide

      }

   b. 부여된값

      위와 같이 기술시  아래 같은 index가 부여 됨

       {

             Add = 1,

            Substract=2,

            Multiply=3,

            Devide=4

       }

   c. 사용

      상수처럼 사용할 수 있음

      if (Calctype.Substract == 변수){

            ...

      }

 

3. 구조체

    a. 선언

       struct Rect

       {

             public int Left;   --public, Private변수들은 모두 첫번째 번수는 대문자로 함

             public int Top;

             public int Height;

             public int Width;

             public Rect(int left, int top, int hegith, int width)

             {

                  Left = left;

                  Top = top;

                  Height = height;

                  Width = width;

             }

       }

    b. 기본 type : value type

       만들어지는 메모리 위치 : stack

       (참고 class는 refrence type이면서 메모리 위치는 : heap메 만들어짐)

    c. 값 부여하기

        Rect r = new Rect();

        r.Left = 10;

        r.Top = 10;

        r.Height = 100;

        r.Width = 100;

        Rect r2 = new Rect(20, 20, 200, 200);




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

C#. DataType-Nullable  (0) 2018.02.02
Posted by 농부지기
,