27. 제네릭 컬렉션
·
💻 Programming Language/C#
제네릭 컬렉션(Generic Collection)의 존재 및 사용 이유 Generic Collection : object 형식에 기반한 기존 컬렉션의 문제들을 해결하는 방법으로 사용되고 있다. Generic(일반화) 기반으로 만들어져 있기 때문에 컴파일시 사용할 형식이 정해지므로 형변환 발생이 줄어든다. 컬렉션이 가지고 있는 성능상의 문제를 해결할 수 있다. ⭐️⭐️⭐️기존 컬렉션이 가지고 있는 성능상의 문제 컬렉션은 데이터를 object형식으로 저장함. int, double, string과 같은 타입을 컬렉션에 저장하게되면 object형식으로 저장하고 컬렉션이 컴파일될때 이와 같이 형변환이 매번 일어나게됨. 또한 컴파일시 뿐만 아니라 컬렉션 내 요소(데이터)에 접근할 때에도 형변환이 계속해서 발생하기 ..
26. 제네릭스(Generics) 타입 제약
·
💻 Programming Language/C#
제네릭스 타입 제약 앞에서 나온 일반화 메소드, 일반화 클래스에서 사용하던 T(Type Parameter)는 모든 데이터 형식을 대신할 수 있는 매개변수로 사용되었다. 모든 형식을 대신하는 매개변수가 필요할 수도 있지만 그렇지 않은 경우도 존재할 수 있다. 그런 경우에는 매개변수에 제약 조건을 줄 수 있다. 제약 조건 주는 방법으로 where절을 이용한다. Ex) class DemoList where T : DemoClass { ... } 위와 같은 경우에 T라는 매개변수는 "DemoClass로 부터 상속받는 형식이어야 한다" 라는 의미 void CopyData(T a, T b) where T : struct // struct는 기본적으로 value type(값 형식) { ... } 위와 같은 경우 T는..
25. 제네릭스(Generics)
·
💻 Programming Language/C#
제네릭스(Generics) : int, float, double 등과 같은 데이터 타입을 확정하지 않고, 이 데이터 타입 자체를 타입 파라미터(Type Parameter)로 받아들이도록 하는 기능 제네릭스(Generics)라고 하면 일반화라고 흔히 알려져있다. Generic 메소드 선언 방식 접근제한자 반환형식 메소드 이름 (매개변수) { ... } Ex) void CopyData(int a, int b) { b = a; b에 a를 복사 } void CopyData(string a, string b) { b = a; b에 문자열 a를 복사 } ... 다른 타입에 대한 CopyData 메소드들... 위의 방식은 데이터 형식에 따라서 여러 개의 메소드가 필요하다. 비효율적인 방법 위의 방식을 Generic ..
24. yield 키워드
·
💻 Programming Language/C#
Enumerator(Iterator) : 집합적인 데이터셋으로부터 데이터를 하나씩 호출자에게 보내주게 하는 기능 => 반복자 yield 키워드는 호출자에게 컬렉션 데이터를 하나씩 리턴할 때 사용하는 키워드 yield 사용방식 yield return : 컬렉션 데이터를 하나씩 리턴하는데 사용 yield break : 리턴을 중지하고 Iteration 루프를 빠져나올때 사용 IEnumerator == 데이터를 리턴(Getter)하는 열거자 public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } Current 읽기 전용 프로퍼티로 현재 위치의 데이터를 object 타입으로 리턴한다. object는 System..
23. 컬렉션 초기화, 인덱서
·
💻 Programming Language/C#
ArrayList, Stack, Queue using System.Collections; using static System.Console; //이와 같이 using static System.Console; 을 선언하면 본문에서 Console을 제외하고 // WriteLine()만으로 출력문을 작성할 수 있다. namespace CollectionInitialEx { class Program { static void Main(string[] args) { //컬렉션 초기자를 이용한 초기화 방법 => Stack, Queue에서는 사용할 수 없다. //Stack이나 Queue는 Add메소드를 사용할 수 없기때문 //컬렉션 초기자는 IEnumerable이라는 인터페이스를 상속받아 Add()메소드를 구현하고 있..