그린티라떼
개발공간
그린티라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • unity (6)
      • 개발 (4)
      • iTween (0)
      • error (2)
    • 게임서버 (5)
    • C++ (7)
      • 문법 (5)
      • 알고리즘 (2)
    • C# (5)
    • CS지식 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • var
  • 데이터타입
  • Delegate
  • interface
  • 다중상속의 문제점
  • cout 스트림 버퍼
  • 일반화컬렉션
  • 유니티 빌드 에러
  • 형식매개변수의 제약
  • 컨테이너
  • delegate chain
  • 정규 표현식
  • Functions
  • C++
  • c#
  • 일반화
  • Container
  • inline 함수
  • regex
  • 메모리영역
  • 함수 호출 오버헤드
  • 유니티
  • Dynamic
  • Gradle build failed
  • cs지식
  • property
  • unity
  • 함수호출
  • object
  • 제네릭

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
그린티라떼

개발공간

C#

C#) Generic 일반화

2022. 1. 13. 21:49

일반화 클래스

 class MyList<T>
    {
        T[] arr = new T[10];
        public T GetItem(int i)
        {
            return arr[i];
        }
    }
    
    MyList<int> myIntList = new MyList<int>();
    int item = myIntList.GetItem(0);

 

형식 매개변수의 제약

class 클래스이름<T> where T : @@@
  • where T : struct   // T는 값 형식이어야 한다.
  • where T : class    // T는 참조 형식이어야 한다.
  • where T : new()   // T는 어떤 인자도 받지 않는 기본 생성자여야 한다.
  • where T : 기반클래스이름    // T는 기반 클래스의 파생 클래스여야 한다.
  • where T : 인터페이스이름    // T는 인터페이스를 구현해야만 한다. 여러 개의 인터페이스를 작성할 수 있다.
  • where T : U    // 또 다른 형식매개변수 U로부터 상속받은 클래스여야 한다.

 

일반화컬렉션

using System.Collections.Generic   // 일반화컬렉션을 사용한다는 선언.

  • 컬렉션 클래스들은 object 형식 기반으로 박싱/언박싱이 일어나 성능에 좋지 않다.
  • 반면 일반화 컬렉션은 일반화에 기반해서 만들어져 있기 때문에 컴파일할 때 컬렉션에서 사용할 형식이 결정되기 때문에 쓸데없는 형식 변환을 일으키지 않고 잘못된 형식의 객체를 담게 될 위험도 피할 수 있다.
  • 일반화 컬렉션은 형 변환이 일어나지 않도록 데이터 타입을 지정해준다. 따라서 정해진 데이터 타입만 사용 가능하다.
  • 대표적으로 LIST< T>, Queue< T >, Stack< T >, Dictionary<TKey, TValue> 가 있다.

 LIST< T >

List<string> ListGen = new List<string>();
ListGen.Add("List");
  • 형식 매개변수를 요구한다는 점만 다를 뿐, 비 일반화 클래스인 ArrayList와 동일한 기능을 하며 사용법은 동일하다.

Queue< T >

Queue<int> QueueGen = new Queue<int>();
QueueGen.Enqueue(1);
  • 형식 매개변수를 요구한다는 점만 다를 뿐, 비 일반화 클래스인 Queue와 사용법은 동일하다.

Stack< T >

Stack<int> StackGen = new Stack<int>();
StackGen.Push(1);
  • 형식 매개변수를 요구한다는 점만 다를 뿐, 비 일반화 클래스인 Stack과 사용법은 동일하다.

Dictionary<TKey, TValue>

Dictionary<string, string> dic = new Dictionary<string, string>()
{
     ["구름"] = "cloud",
     ["백조"] = "swan",
     ["콩"] = "bean"
};

     WriteLine(dic["구름"]);
     WriteLine(dic["백조"]);
     WriteLine(dic["콩"]);
  • Dictionary<TKey, TValue>는 Key와 Value 형태로 이루어진 Hashtable의 일반화 버전이다.

 

'C#' 카테고리의 다른 글

C#) delegate 대리자  (0) 2022.01.14
C#) property  (0) 2022.01.13
C#) interface 인터페이스  (1) 2022.01.13
C#) var & dynamic & object  (0) 2022.01.13
    'C#' 카테고리의 다른 글
    • C#) delegate 대리자
    • C#) property
    • C#) interface 인터페이스
    • C#) var & dynamic & object
    그린티라떼
    그린티라떼

    티스토리툴바