일반화 프로그래밍
- 일반화 프로그래밍(Generic Programming)은 타입에 무관하게 알고리즘을 작성하는 프로그래밍 기법
- 실제 타입은 매개변수를 통해 전달
- 일반화 프로그래밍을 이용하면 코드의 재사용성을 극대화 시킬 수 있음
- 기존에 작성하던 방식은 타입에 강하게 종속되어 있기 때문에 알고리즘이 동일하더라도 타입을 전부 바꿔서 작성해야 했지만, 일반화 프로그래밍을 이용하면 그러지 않아도 됨
- 일반화 프로그래밍을 이용하면 매개변수에 타입도 전달함. int, string 등등의 타입들이 매개변수화가 됨

제네릭
- C#에서는 일반화 프로그래밍을 제네릭(Generic)으로 제공하고 있음
- 위의 일반화 프로그래밍의 예시에서 T는 타입 매개변수(=타입 파라미터)
- 타입 파라미터는 클래스, 인터페이스, 대리자, 메소드에 붙일 수 있음

제약
- 아무 타입이나 전달되지 못하도록 제약을 걸 수 있음
