C# 10

C# 2019. 12. 9. 19:05

* 일반화 프로그래밍


// generic programming이라고 하지만.. c++에서 배운 그냥 템플릿임.

// 데이터형을 구분하지 않고 하나로 유연하게 사용할 때 필요



* 일반화 메소드


        void abc<T>(T[] a)

        {

            foreach(T x in a)

            {

                Console.Write(x);

            }


        }


        static void Main(string[] args)

        {

            int[] a = { 1, 2, 3 };

            

            abc<int>(a);

        }


// 보낼 때 자료형을 나타냄. 

// 받을 때 T 써줌. 꼭 T가 아니어도 됨. 템플릿 약자인듯?



* 일반화 클래스


    class aaa<T>

    {

        private T x;


        public void y (T z)

        {

            x = z;

            Console.WriteLine(x);

        }

    }

    class Program

    {      

        static void Main(string[] args)

        {

            aaa<int> a = new aaa<int>();

            a.y(10);            

        }

    }


// 클래스에 <T> 넣어줌. class aaa<T>

// 선언할 때 aaa<자료형> a = new aaa<자료형>();

// 클래스 내부에서 템플리 사용해줌



* 형식 매개변수 제외


- 안함



* 일반화 컬렉션


// using system.collections.generic;

// 컬렉션의 일반화 버전 list<t>, queue<t>, stack<t>, dictionary<tkey, tvalue>


List<int> abc = new List<int>();


abc.Add(1);

abc.Add(3);

abc.Add(5);

abc.RemoveAt(2);  // 2번 인덱스 값 5 삭제 

abc.Insert(1, 6);  // 값 1과 3 사이 1번 인덱스에 6 삽입


// Console.WriteLine(abc[1]);  // 곧바로 접근 가능


foreach (int x in abc)

{

Console.WriteLine(x);

}


// 달라진게 전혀 없다. 선언 부분만 바뀜.

// arraylist abc -> List<int> abc

// new arraylist() -> new List<int>();



Queue<int> abc = new Queue<int>();

abc.Enqueue(1);
abc.Enqueue(3);
abc.Enqueue(5);

foreach (int x in abc)
{
Console.WriteLine(x);
}


Stack<int> abc = new Stack<int>();

abc.Push(1);
abc.Push(3);
abc.Push(5);
while(abc.Count > 0)
{
Console.Write(abc.Pop());  // pop은 스택에서 하나씩 빼서 출력
}


Dictionary<string, string> abc = new Dictionary<string, string>();

abc["a"] = "a";
abc["bbb"] = "bbb";
Console.Write(abc["bbb"]);

// 해쉬 테이블의 일반화 버전은 좀 달라짐.
// <키, 값>의 자료형이 입력 되어야함. 나머지는 똑같음..


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

C# 12  (0) 2019.12.09
C# 11  (0) 2019.12.09
C# 9  (0) 2019.12.09
C# 8  (0) 2019.12.09
C# 7  (0) 2019.12.09
블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,