안전하게 못쓰면


에러를 띄우고싶은데서 미리 체크걸고 캐치하거나 래핑해서 반환해주는 방법이 있는데 (언어에서 귀찮지만 직접 장황하게 쓴다는말)



JVM이 제네릭을 지원안하니까


런타임에 타입정보가 소실되어버려서 이거 어케 해도 안전하게 쓰는게 불가능함




만약에


MyGen<String> 타입을 MyGen<Long> 타입으로 잘못 변환했으면


이거를 미리 체크할수가없고


Long 과 String이 불일치하는 지점까지 가서야 그때 문제가 발생함.


미리 체크가 안됨.



물론 MyGen에 이것만을 하기 위해서

getTypeClass() 를 하면


MyGen<T> 에 대해 T.class 를 반환하도록 메소드를 하나 추가하면 되는데... 라고 할줄알았지?

이것도 안됨 ㅋㅋㅋ

T.class 당연히 안되고 (T정보가 소실되어서 그냥 이런 명령어 자체를 실행시킬수가없음. T에 접근 불가능이라고 컴파일에러메세지뜸)


내부에 T data; 라는 필드가 있다는 좋은 경우에 대해

data.getClass() 하면 됨


근데 이것도, 내가 만든 클래스에 대해서만 이게 가능하고


또 흠...


에러체크를 위해서 이런 조잡한 코드가 들어간다는게 상당히 기분 나쁨.




결론은



그냥


프로그래머를 믿어라


라고 하는 수밖에 없고


에러 터지면 그때 코드를 고치는게 맞는거같음. 이 경우는 에러를 적절히 핸들링할생각말고 터지면 디버깅해서 코드를 고치는걸로


약간


C의 세그폴트처럼.



글구 가장 짜증나는건



사실 이거 실수할 일이 없음.


협업할때 초보개발자 주니어한테 제네릭 맡기면 터지겠지 라는 정도


그걸 못막는것 뿐임.



그냥 뭐 네카라도 제네릭 안쓴다며




내가 만들지 않은 제네릭에 대해서는 그게 안되니까...