상위 목록: 하위 목록: 작성 날짜: 읽는 데 9 분 소요

제네릭(Generic)

제네릭(Generic)은 데이터 형식을 지정하지 않고 형식 매개변수로 전달해 클래스를 정의합니다.

제네릭을 활용할 경우, 데이터 형식별로 클래스를 생성하지 않아 재사용성, 안전성 등을 최대화 할 수 있습니다.

C++의 템플릿과 비슷한 역할을 합니다. 더 간단한 접근 방식을 제공하지만, 산술 연산자는 호출할 수 없고 사용자 정의 연산자는 호출할 수 있습니다.



전체 코드

using System;

namespace Project
{
    class Program
    {
        static void Main(string[] args)
        {
            GenericQueue<int> intData = new GenericQueue<int>(100);

            intData.Enqueue(100);
            intData.Enqueue(200);
            intData.Enqueue(300);

            Console.WriteLine(intData.Dequeue());
            Console.WriteLine(intData.Dequeue());
            Console.WriteLine(intData.Dequeue());

            intData.Enqueue(400);
            Console.WriteLine(intData.Dequeue());
            Console.WriteLine(intData.Dequeue());
        }   
    }

    class GenericQueue<T>
    {
        public T[] array;
        private int count = 0;

        public GenericQueue(int length)
        {
            array = new T[length];
        }

        public void Enqueue(T value)
        {
            array[++count] = value;
        } 

        public T Dequeue()
        {
            return count == 0 ? default(T) : array[count--];
        }
    }
}

제네릭 클래스<T>를 활용해 정의합니다.

T는 형식 매개변수를 의미하며, 이 값으로 데이터 형식이 설정됩니다.


세부 코드

class GenericQueue<T>
{
    public T[] array;
    private int count = 0;

    public GenericQueue(int length)
    {
        array = new T[length];
    }

    public void Enqueue(T value)
    {
        array[++count] = value;
    } 

    public T Dequeue()
    {
        return count == 0 ? default(T) : array[count--];
    }
}

형식 매개변수를 활용하는 변수에는 T를 사용해 정의합니다.

array 변수는 형식 매개변수의 배열이 됩니다.

GenericQueue 생성자를 통해, 배열 T의 크기를 설정합니다.

Enqueue 메서드를 통해 값을 입력합니다.

Dequeue 메서드를 통해 값을 출력합니다.

이때, count의 값이 0이라면, default(T)를 반환합니다.

default(T)는 형식 매개변수가 값 형식인 경우 0을 반환하며, 참조 형식인 경우 null을 반환합니다.


GenericQueue<int> intData = new GenericQueue<int>(100);

intData.Enqueue(100);
intData.Enqueue(200);
intData.Enqueue(300);

Console.WriteLine(intData.Dequeue());
Console.WriteLine(intData.Dequeue());
Console.WriteLine(intData.Dequeue());

intData.Enqueue(400);
Console.WriteLine(intData.Dequeue());
Console.WriteLine(intData.Dequeue());
결과
300
200
100
400
0

GenericQueue를 생성할 때 형식 매개변수를 int로 사용합니다.

Enqueue 메서드로 값을 넣을 수 있으며, Dequeue 메서드로 값을 반환합니다.

더 이상 출력할 값이 없다면 0이나 null을 반환합니다.

댓글 남기기