제네릭을 사용하는 이유
제네릭을 사용하지 않았을 시
1. 데이터 형변환 해주는 거 너무 불편함!!
2. 틀린 자료형으로 형변환을 해도 런타임오류라서 빨간줄은 그이지 않지만
실행하면 오류가 나서 오류 찾기가 어려움!!
제네릭 사용법
클래스명<타입매개변수>
-통상적으로 많이 쓰는 타입 매개변수
T : type
E : element
N : Number
K : Key
V : Value
제네릭으로 만들어진 클래스를 객체 생성할 때 원하는 타입으로 생성가능!
이렇게 오렌지타입으로 객체를 생성했는데 사과타입을 넣으면
빨간 줄 오류가 표시돼서 오류확인에 용이함!!
get()으로 불러왔을 때 형변환도 해줄 필요 없어서 너무 편리함!!
타입 2개 지정 가능!!!
제한된 제네릭
타입인자로 특정 타입만 들어올 수 있도록 지정할 수 있음
상속으로 제한하기
<T extends 클래스명>
: 해당 클래스를 상속받은 클래스만 타입인자로 들어올 수 있음
타입인자가 Aaa를 상속받는 클래스이기 때문에
Aaa의 메소드인 aaa()함수를 넣을 수 있음
+
만약 <T extends Ccc>일 경우
aaa(), bbb(), ccc() 모두 쓸 수 있음!
Ccc는 Bbb를 상속받고 Bbb는 Aaa를 상속받기 때문에 Ccc, Bbb, Aaa의 메소드들을 다 사용가능!
메소드의 제네릭화
<T> 리턴타입 메소드명(T data)
앞에 <T>는 제네릭 메소드라는 표시
뒤에 리턴타입으로는 제네릭 타입이 옵니다 GenericBox<T>
제한된 제네릭메소드
lgmakeBox()의 매개인자로는 Bbb클래스, Bbb클래스 상속받는 클래스만 들어올 수 있음!