얼마 전 공부 중인 지인을 돕다가 예전의 내 경우와 똑같은 문제로 고민하는 것을 보았다. 서로 다른 타입 인수를 가진 제네릭 타입을 하나의 컬렉션에 담고 싶다는 것이다. 문제 어떤 타입이든 상관 없이 하나로 묶고 싶다고 생각한다면 object를 담는 컬렉션를 사용하는 방법을 떠올리기 쉽다. object로 할 수 있는 것은 Equals()나 ToString() 호출 정도이니 원하는 타입으로 캐스팅하여 사용하게 될 것이다. 캐스팅을 이용한 방법에는 크게 두 가지가 있다: 필요한 곳에서 필요한 대로 적당히 캐스팅해서 사용 언제 어디서 예외가 발생할 지 모르며 너무 즉흥적이라 작성한 본인도 의도를 잊어버릴 수 있다. Type 타입의 객체를 저장해 뒀다가 캐스팅하거나 비교해서 사용 장황하고 짜증나는 방식이다. 제..