.Net Framework/C#2010. 1. 28. 09:04


C# : 다중 상속의 폐해 등과 같이 복잡한 문제점은 제거. 실용성을 중시. .NET Framework의 클래스 라이브러리딜이 이미 C#으로 작성되어 있음

C# 2.0의 주요 특징
-Generic : 더 많은 코드 재활용성과 컬렉션 클랫의 성능 향상을 꾀하기 위해 추가. 매개 변수에 의해 구분되어지며, 매개 변수는 특정 형식을 갖도록 강제 될 수 있음. 데이터 자장과 처리에 있어서 상당한 속도 향상.
-Iterators : Foreach 루프에 의해 컬렉션의 내용을 어떻게 반복하여 접근하는가를 쉽게 지시
-Patial Type : 여러개의 다른 소스파일을 나누어서 클래스를 저장. 시스템이 생성한 코드와 개발자가 작성한 소스 코드를 분리하여 작성 할 수 있음.
-익명 메서드 : 코드 조각을 인자로 전달하는 것이 가능. Delegate가 필요한 곳이면 메서드를 정의할 필요 없이 코드를 사용 가능.

컬렉션 : 저장 공간의 제약을 반지 않고 데이터를 저장, 다양한 데이터 타입의 데이터를 저장할 수 있음.
-값 타입 : 박싱, 언박싱
-참조 타입 : 상위 캐스팅, 하위 캐스팅
*값 타입을 컬렉션 개체에 저장하기 위해서 참조 타입으로의 박싱이 발생하게 되고, 컬렉션 개체에 저장된 데이터를 리턴 받기 위해서는 언박싱이 발생, 개체를 컬렉션에 저장하기 위해서는 부모 클래스의 형태로 상위 캐스팅이 발생, 저장된 데이터를 리턴 받기 위해서는 하위 클래스로 하위 캐스팅을 해야함.

Generics : 동적으로 저장 공간의 사이즈를 늘려 데이터를 저장하는 기능과 동일한 데이터 타입을 저장하는 특징.
-명확한 타입 지정을 통한 컴파일 시의 에러 체크 및 런타임 시의 에러 방지
-불필요한 박싱, 언박싱 방지를 통한 성능 향상
-상위 캐스팅, 하위 캐스팅 방지를 통한 성능 향상
-System.Collections.Generics 네임스페이스 사용을 통한 편이성 제공
*'로직'과 '로직에 의해 다뤄지는 개체'를 명확하게 구분할 수 있음. 유연성에 있어서 선택의 폭이 상당히 넓어졌다고 할 수 있음.
예) Stack<int> store = new Stack<int>(); : 안에 명시하는 데이터 타입에 의해서 현재 Stack 개체에 저장되는 데이터의 타입이 결정.

**readOnly 한정자
-선언의 일부로 대입 또는 동일한 생성자에서 대입하는 경우에만 선언

Generics의 제약 조건
-Generics코드는 클라이언트가 사용하는 특정 형식과 호환되지 않는 Generics 형식 매개 변수의 메서드, 속성 또는 맴버를 사용할 수 있음.
-결과적으로 형식 안전성을 떨어뜨릴 수 있기 때문에 허용될 수 없음.

제약 조건 | 설명
where T : struct | 형식 매개 변수는 Value Type
where T : class | 형식 매개 변수는 Reference Type
where T : new() | 매개 변수를 지니고 있지 않는 Default 생성자를 지니고 있어야 함.
where T : <base class name> | <base class name>에 해당 하는 클래스를 상속받아야 함.
where T : <interface name> | <interface name>에 해당하는 인터페이스를 구현하고 있어야함
**where 키워드로 제약 조건을 정의, 컴파일러에게 형식 매개 변수가 지니고 있는 제약 조건을 알려줌


Dictionaries : Key와 Value의 쌍으로 데이터를 저장할 수 있는 컬렉션
-Dictionary의 경우는 object형태의 Key 값과 value 값을 저장할 수는 있지만 Key 값의 경우는 간단하고 찾기 빠른 형태의 데이터 타입을 사용하는 경우가 일반적
예)
using System;
using System.Collections.Generic;

namespace GenericDictionary
{
    public class Program
    {
        static void Main()
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            dictionary.Add("01", "Son");
            dictionary.Add("02", "johnharu");
            dictionary.Add("03", "Lee");
            dictionary.Add("04", "Hong");

            Console.WriteLine("dictionary[\"01\"]:{0}", dictionary["01"]);
        }
    }
}

 

Iterators
-for, foreach의 단점 : 사용자가 직접 정의하는 컬렉션의 경우 foreach 문을 사용하기 위해서는 IEnumerable 인터페이스를 상속받아 GetEnumerator 메소드를 구현해야 하며, Enumerator는 IEnumerator 인터페이스를 상속 받아 관련 메서드를 구현해 주어야 하는 코드상의 불편함이 있음.
-Iterator : foreach문에서 사용되어 지정된 범위만큼을 반복하면서 지속적으로 결과를 리턴하는 코드 블록을 일컫는 말
-IEnumerable을 상속 받아 구현
-기존의 복잡한 형태의 코드를 간결화 하기 위해 새로운 키워드로 yield return 사용

 

Anonymous Methods
-메서드를 통해 처리하는 내용을 인라인의 형태로 처리하는 방법을 제공
-델리게이트를 통해 메서드를 호출하는 경우에는 호출할 수 있는 메서드의 타입을 델리게이트를 생성하면서 선언-이벤트 발생하였을 경우에 델리게이트를 통해 선언도니 메서드를 호출하여 원하는 작업을 처리하는 방식의 이벤트 기반 프로그램


델리게이트
-한 번의 호출로 하나의 메서드나 여러 개의 메서드를 동시에 호출 할 수 있음
-대부분의 메서드는 완벽한 형태를 띄고 있는 모습이 일반적.
-특정 클래스의 멤버로서 선언
-저장 공간에 자리 잡고 있는 상태
*이런 경우가 아닌 델리게이트의 경우 특정 클래스의 멤버로 선언하여 굳이 개체를 생성하여 호출할 필요 없이 메서드를 통해 처리하고자 하는 작업을 익명 메서드의 형태로 델리게이트를 통해 호출 가능

 

Nullable 타입
-.Net Framework CTS(Common Type System)에 정의된 데이터 타입에는 값 타입(Value Type)과 참조 타입(Reference Type)이 있음. 두 타입의 다양한 차이점 중에 NULL 값을 설정할 수 있는지의 여부는 두 데이터 타입을 결정짓는 하나의 기준이 됨. 참조 타입의 경우는 널 값을 설정하여 개체 생성을 나중으로 미뤄둘 수 있지만, 값 타입의 경우는 초기화를 통한 데이터의 할당이 이루어져야 함.
-참조 타입이 아닌 값 타입에도 NULL 값을 저장할 수 있도록 C# 2.0에 새롭게 추가된 개념이 Nullable 타입.
-값 타입이 지닐 수 있는 값의 범위에 Null 값이 하나 추가된 개념.

 

'.Net Framework > C#' 카테고리의 다른 글

Repeater  (0) 2010.02.17
ViewState  (0) 2010.02.17
ID와 ClientID의 차이  (0) 2010.02.17
PostBack URL 그리고 Redirect Method  (0) 2010.02.17
델리케이트,이벤트,어트리뷰트  (0) 2010.02.17
Posted by Tiwaz