개요

프로그래밍에서 재사용성은 매우 중요하다.

특정 자료형에 종속되지 않고, 다양한 타입에 대해 동작하는 코드를 만들 수 있다면

유지보수성과 확장성이 크게 향상된다.

C#에서는 이를 가능하게 해주는 기능으로 **제네릭(Generic)**을 제공한다.

제네릭은 클래스, 메소드, 인터페이스 등에서 자료형을 일반화하여

형식 안정성과 코드 재사용을 동시에 만족시킨다.


🧠 제네릭이란?

자료형을 미리 지정하지 않고, 필요 시점에 타입을 지정하는 문법

csharp
복사편집
public class Box<T>
{
    private T item;

    public void Store(T value)
    {
        item = value;
    }

    public T Pull()
    {
        return item;
    }
}

csharp
복사편집
Box<int> intBox = new Box<int>();
intBox.Store(123);
Console.WriteLine(intBox.Pull()); // 123

Box<string> strBox = new Box<string>();
strBox.Store("Hello");
Console.WriteLine(strBox.Pull()); // Hello


✏️ 제네릭을 왜 사용하는가?

기존 방식 제네릭 방식
object로 타입을 일반화 → 박싱/언박싱 발생 타입 안정성 보장 + 성능 유지
매 타입마다 클래스/메소드 생성 필요 하나의 코드로 다양한 타입 대응
형변환 오류 위험 있음 컴파일 타임에 타입 검사 가능

🔨 제네릭 메소드

특정 메소드에만 타입 매개변수를 적용할 수 있음