제네릭 클래스를 상속 구조로 사용할 때 흔히 마주치는 개념 중 하나는 **공변성(Covariance)**과 **반공변성(Contravariance)**이다. 특히 C#과 같은 정적 타입 언어에서는 이 개념이 제네릭 매개변수의 타입 안정성과 대입 가능성에 직접적인 영향을 주기 때문에, 제네릭 매개변수를 실 구현체 이전에 특정하는 전략에 신중한 판단이 요구된다.1. 공변성과 반공변성의 개념공변성은 자식 타입을 부모 타입으로 안전하게 대입할 수 있는 경우를 의미한다. 예를 들어, Cat이 Animal의 하위 클래스일 때, IEnumerable을 IEnumerable로 참조할 수 있는 경우가 공변성이다. 반면, 반공변성은 부모 타입을 자식 타입에 대입할 수 있는 경우로, 주로 델리게이트나 인터페이스의 인자 위치..