공변 반공변은 제네릭에서 나오는 이야기 아님? 업캐스팅 다운캐스팅하고 살짝 결이 다른거 같은데Animal cat = new Cat(); // 업캐스팅Cat danddo = cat; // 다운캐스팅Food cat_food = new Food(danddo);Food food = cat_food; // 공변(covariant), 보통 허용됨Food saryo = food; // 이게 허용되면 반공변(contravariant)참고자료:https://learn.microsoft.com/ko-kr/dotnet/standard/generics/covariance-and-contravariance
아니 꺾쇠<는 시스템이 다 묵어부렀어?? 대신 대괄호로 표현하겠음 Food[Cat] cat_food = new Food(danddo); Food[Animal] food = cat_food; Food[Cat] saryo = food;
공변(covariant)이라는 뜻이 공: 공통으로, 같이, 함께 변: 변한다 라는 뜻이라 쉽게말해 제네릭 매개변수의 타입이 서로 derivative 관계에 있으면 기존 업캐스팅 하듯이 제네릭 매개변수의 업캐스팅도 허용한다는 거임. 반공변은 그것의 다운캐스팅 버전이고.
공변 반공변은 제네릭에서 나오는 이야기 아님? 업캐스팅 다운캐스팅하고 살짝 결이 다른거 같은데
Animal cat = new Cat(); // 업캐스팅
Cat danddo = cat; // 다운캐스팅
Food cat_food = new Food(danddo);
Food food = cat_food; // 공변(covariant), 보통 허용됨
Food saryo = food; // 이게 허용되면 반공변(contravariant)
참고자료:
https://learn.microsoft.com/ko-kr/dotnet/standard/generics/covariance-and-contravariance
아니 꺾쇠<는 시스템이 다 묵어부렀어?? 대신 대괄호로 표현하겠음 Food[Cat] cat_food = new Food(danddo); Food[Animal] food = cat_food; Food[Cat] saryo = food;
공변(covariant)이라는 뜻이 공: 공통으로, 같이, 함께 변: 변한다 라는 뜻이라 쉽게말해 제네릭 매개변수의 타입이 서로 derivative 관계에 있으면 기존 업캐스팅 하듯이 제네릭 매개변수의 업캐스팅도 허용한다는 거임. 반공변은 그것의 다운캐스팅 버전이고.