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()메소드를 구현하고 있..
22. Queue, Stack, Hashtable 사용
·
💻 Programming Language/C#
Queue(큐) Queue : 선입선출(first in first out(FIFO)) 형태의 자료구조 Enqueue : 데이터를 입력 Dequque : 데이터를 출력 using System.Collections; namespace QueueEx { class Program { static void Main(string[] args) { Queue q = new Queue(); q.Enqueue(1); q.Enqueue(100); q.Enqueue(200); q.Dequeue(); q.Enqueue(22.5); int aa = (int)q.Dequeue(); // obj타입으로 반환되므로 casting 필요. q.Enqueue("가나다"); while(q.Count > 0) { Console.WriteLi..
21. ArrayList 사용하기
·
💻 Programming Language/C#
Collection(컬렉션) : 간단히 말하면, 데이터 모음을 담는 자료구조 배열이나, 스택, 큐 등을 컬렉션이라는 이름으로 제공 배열은 System.Array 타입이다.(=System.Array클래스를 상속받는다.) => System.Array는 ICollection 인터페이스를 상속 => 따라서 배열도 컬렉션(collection)의 일부이다. .Net 프레임워크에서 사용하는 컬렉션은 ICollection 인터페이스를 상속받는다. ArrayList, Queue, Stack, Hashtable ArrayList ArrayList는 배열과 비슷한 컬렉션 배열처럼 []인덱스로 요소의 접근이 가능하고, 특정 요소를 바로 읽고 쓸 수 있다.하지만, 배열을 선언할 때는 배열 크기를 지정하는 반면, ArrayLis..
20. 추상클래스에서 자동 프로퍼티 사용법
·
💻 Programming Language/C#
namespace AbstractEx { abstract class Book { private static int isbn = 0; public string ISBN { get { return String.Format("{0:d4}", isbn++); } } // 추상 프로퍼티 => 구현이 안된 프로퍼티 abstract가 붙어있기 때문에 abstract public DateTime BookDate { get;set; } } class MyBook : Book { public override DateTime BookDate { get; set; } } class Program { static void Main(string[] args) { Book book1 = new MyBook() { BookDate ..