'2018/02/02'에 해당되는 글 6건

  1. 2018.02.02 C#.VAR
  2. 2018.02.02 C#. DataType-Nullable
  3. 2018.02.02 C#. DataType
  4. 2018.02.02 C#-기술집 URL
  5. 2018.02.02 C#, .NET 기본개념
  6. 2018.02.02 C#. 파일(소스)기본구조

C#.VAR

C#/var.dynamic.object 2018. 2. 2. 16:49

[ var ]


1. 정의

   C# 3.0에서 새롭게 등장한 형식으로 자바스크립트를 개발한 경험이 있다면 이미 본적이 있을 것이다. 

   자바스크립트와 마찬가지로 var로 선언된 변수는 모든 형식을 사용할 수 있지만, 

   차이점은 한번 선언된 형식은 불변으로 선언된 이후에 다른 형식의 값으로 설정 할 수 없다.


   그럼 왜 var 형식이 나오게 된 것일까? 이전 장에서 Nullable 형식에 대해 살펴 보았을 것이다. 

   이와 마찬가지로 var 형식도 DB처리와 연관이 있다. 우리가 인라인 쿼리를 작성하는 것을 생각해 보자. 

   하나의 테이블에서 조회를 할 경우도 있지만, 특정 컬럼만 가지고 오거나, 

   여러 테이블과 조인을 하여 보고자 하는 형태로 쿼리를 작성하는 경우가 더 많을 것이다.


   그럼 그 조회된 결과는 물리적으로 DB에 존재하는 테이블인가? 아니다. 

   쿼리가 발생할 때 마다 동적으로 생성되는 것이다. 

   그럼 그 조회된 결과를 C# 코드에서 받을 때는 어떻게 처리 하여야 될까? 

   C# 3.0 이전에는 DataTable이란 곳에 담거나, 

   쿼리 컬럼과 일치하는 클래스를 미리 생성해 놓아야 했다. 만약 조회 쿼리가 동적으로 변한다면? 이 또한 난감함 문제이다. 

   이럴 경우 익명 형식(anonymous type)과 함께 사용하게 되면 위에서 했던 고민이 해결 된다. 

   익명 형식은 인라인 쿼리 결과처럼 클래스를 명시적으로 선언하지 않고도 사용하고자 하는 시점에 동적으로 생성이 가능하다. 

   이렇게 동적으로 생성된 익명 형식을 var 타입으로 선언 변수 값으로 설정하면 되는 것이다. 

   익명 형식은 다음 장에서 좀더 자세히 살펴 볼 수 있다.


   var 형식은 모든 형식을 설정할 수 있지만 컴파일 시점에 형식이 확정 되므로 성능상의 이슈는 없다.


2. 사용 가능한 형식

   내장 형식(built-in type) : int, string 등

   익명 형식(anonymous type)

   사용자 정의 형식(user-defined type) : class, struct 등

   .NET FCL : Stream, List<T> 등

 


3. 선언시 유의사항

   var temp;         //초기화기 되지 않음

   var temp = null;     //특정한 형식을 가져야 함.

   메서드의 파라미터로 사용할 수 없음

Posted by 농부지기
,

[ 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 농부지기
,

[ C#-기술집 URL ]


    - MSDN

    - Visual C#개발자 센터

    - MSDN Magazine

'자바(java) > 기본문법' 카테고리의 다른 글

Java. Annotation  (0) 2017.03.12
Servlet - Session관리  (0) 2017.02.02
Posted by 농부지기
,

[ C#, .NET 기본개념 ]


1. 컴파일

   - 작성된 코드를 빌드하게 되면 MSIL(Microsoft Intermediate Language)이라고 하는 

     기계어 직전 단계의 언어로 구성된 어셈블리가 생성이 된다. 

     바로 바이너리(Binary) 형식이 아닌 MSIL 형태로 생성을 하게 되는 이유는 자바와 마찬가지로 플랫폼에 종속적이 않고, 

     다양한 플랫폼에 이식 가능하도록 하기 위해서 이다. 

     현재 Mono 프로젝트(http://www.mono-project.com/Main_Page)를 통해서 다양한 플랫폼에 적용 가능하다. 

     이렇게 MSIL 형태로 존재하는 어셈블리는 실행되는 시점에 

     Just-In-Time (JIT) 컴파일러(compiler)가 각 플랫폼에 맞는 코드로 컴파일 되며 실행이 된다.


2. 닷넷 프레임워크

   - 이러한 런타임 환경에서 일어나는 다양한 일들은 닷넷 프레임워크에서 제공해 준다.

   - 구성요소

     . CLS(Common Language Specification)

       닷넷 프레임워크는 다양한 언어로 개발이 가능하다. 

       하지만 문제는 각 언어별로 특별히 지원하는 스펙이 존재할 것이다. 

       모든 프로젝트다 특정 하나의 언어로만 생성된 어셈블리만 사용하면 상관이 없으나, 

       개발을 하게 되면 다양한 언어로 개발된 어셈블리를 참조하게 될 것이다. 

       만약 참조된 어셈블리에서 지원하는 자료형 등이 해당 언어에서 지원이 되지 않는다면? 

       난감한 상황이 발생하게 된다. 

       이러한 문제점을 줄이고, 다양한 언어들 간에 호환성을 놓이기 위해 닷넷 프레임워크를 지원하는 최소한의 스펙을 정의하고 있는데 그것이 바로 CLS이다. 

       CLS 규칙을 따르는 것은 개발 시점에서는 약간의 제약사항이 발생을 하게 되지만 다른 언어들 간의 상호 운영성은 증대하게 된다.


     . CTS(Common Type System)

       CLS를 포함하여, 닷넷에서 사용하게 되는 필드(Field), 

       메소드 등 모든 스펙이 정의된 것을 가리킨다.


     . CLR(Common Language Runtime)

       실행되는 프로그램의 메모리 관리, 보안 등 실제 운영되는 환경을 관리하게 되는 핵심 요소 이다.


     . GC(Garbage Collector)

       닷넷 프레임워크는 예전의 비관리 코드(Unmanaged Code)로 작성되던 시기에 

       개발자가 직접해주던 메모리 관리를 GC를 통해서 자동으로 하게 된다.


'C# > 기본개념' 카테고리의 다른 글

C#. 파일(소스)기본구조  (0) 2018.02.02
Posted by 농부지기
,

[ C#. 파일(소스)기본구조 ]


1. C#으로 작성된 어플리케이션 3가지 요수로 구성

   - 어셈블리(Assembly)

   - 네임스페이스(Namespace)

   - 클래스(Class)


2. 어셈블리(Assembly)

   - 클래스, 네임스페이스가 모여 생성된 물리적 파일.

   - 간단히 말하면 빌드 후 생성되는 DLL 혹은 EXE 파일이라고 생각하면 된다.

 

3. 네임스페이스(Namespace)

   - 여러 개의 클래스들이 모인 논리적 그룹 단위.


4. 클래스(Class)

   - 프로그램 내에서 독립적으로 존재할 수 있는 최소 단위.

   - 멤버로 메소드(Method), 프로퍼티(Property), 이벤트(Event), 델리게이트(Delegate) 등을 가진다.




A. using 블록

   닷넷 프레임워크는 방대한 BCL(Base Class Library)을 제공해 주고 있다. 

   각 라이브러리는 네임스페이스와 클래스가 잘 계층 구조를 가지며 분류가 되어 있으며, 

   상단에 사용하고자 하는 네임스페이스를 미리 선언한다. 

   선언된 네임스페이스는 사용되는 시점에 네임스페이스를 생략하고 바로 클래스명으로 작성을 하고, 

   만약 네임스페이스를 using 구문으로 선언을 하지 않았으면 사용하는 시점에 

   [네임스페이스].[클래스].[메소스] 와 같이 전체 명칭을 작성해 주면 된다. 

   코드에서 보는 것처럼 Console.WriteLine() 메서드는 System 네임스페이스에 

   존재하는 클래스로 using 블록에 선언을 하였으므로 네임스페이스명을 생략 하였다.

    System.Console.WriteLine()과 같이 작성하여도 된다.


B. 네임스페이스 선언

   PC에서 파일 관리할 때를 생각해 보라. 

   각 자료의 특성에 따라 폴더를 분리하고, 그 안에서 파일을 관리한다. 

   마찬가지로 네임스페이스도 각 클래스들의 기능단위를 논리적으로 묶어 놓는 역할을 한다.


C. 클래스 선언

   독립적으로 존재할 수 있는 최소 단위로 모든 메서드는 반드시 클래스(혹은 struct)의 멤버이어야 한다.

'C# > 기본개념' 카테고리의 다른 글

C#, .NET 기본개념  (0) 2018.02.02
Posted by 농부지기
,