제네릭 (여기 강의 다시 듣자.. 제대로 이해 못함)


제네릭과 타입 파라미터

근데 사전 배경에 이어서 요구사항이 생겼다.

금붕어 케이지에서 물고기 케이지로 이동시키자.

val goldFishCage = Cage<GoldFish>()
goldFishCage.put(GoldFish("금붕어1"))

val fishCage = Cage<Fish>()
fishCage.moveFrom(goldFishCage) // **Type Mismatch! 실패**

이거 왜 안되지?? 이제 알아보자

배열과 리스트, 제네릭과 무공변

상속 관계에서 상위 타입과 하위 타입의 의미를 다시 생각해보자

여기서 말하는건 제네릭클래스까지 타입의 상속관계가 유지되지 않는다는게 핵심 내용이다.

자바에서는 배열의 경우

근데 공변하면 뭐가 문제지?

String[] strs = new String[] {"A", "B", "C"}
Object[] objs = strs; // 공변이라 가능
objs[0] = 1; // 여기가 문제임! 런타임에 에러가 발생한다.