반응형
Collection(Map/Set/List)에서의 Generic
<Type>
: 개발자가 Type을 지정한다
장점
- 제네릭이 없는 List에 여러가지 타입의 값을 담았을 경우에
- int hello = (int) lst1.get(0);
와 같이 형변환시에 ClassCastException이 일어납니다.
- 제네릭을 이용해 하나의 타입으로 지정하면 컴파일 시, 지정한 제네릭을 사용하는 지 Type검사를 합니다.
- 제네릭을 Collection(Map/Set/List)에 사용하면, 지정한 Type만을 사용할 수 있지만
- 오류방지와 사용에 수월합니다.
만약 제네릭을 사용하지 않을 시 Collection사용 시 값의 타입이 무엇인지 확인 후 사용해야 하겠죠.
또한 제네릭을 보고 어떤 타입을 사용하고 있는 지 바로 확인 할 수 있습니다.
Class & Method 에서의 Generic
위에서 제네릭은 Collection(Map/Set/List)에서 사용하는 방법이었습니다.
Collection에서는 제네릭은 하나의 타입만 지정해서 사용할 수 있지만
Class와 Method에서는 제네릭은 거의 반대로 사용됩니다.
사용법도 좀 다릅니다.
<T>
- 여기에서 T는 타입을 지정한 게 아니라 개발자가 지정한 타입명입니다.
- 변수 a를 선언할 때
private T a;
와 같이 타입명 대신 사용할 수 있습니다.
- 이렇게 아무 이름이나 지정할 수 있지만 <T>로 사용하기로 암묵적 약속이 되어있습니다.
- T : Type의 약자.
사용법
: 모든 타입 허용
- T를 int/boolean/String/Collections와 대신해서 적어 사용할 수 있습니다.
- T라는타입은 마치 Object와 같이 모든 타입을 허용합니다.
- 호출한 사용자가 지정한 타입으로 사용가능합니다.
주의할 점
Generic은 Collection에서 사용 시 타입은 좁히는 역할을 하고
Class & Method에서는 타입을 넓히는 역할을 합니다.
그럼 무조건 유연성을 높이게끔 <T>를 사용하는 게 나을 것 같지만 그렇지 않습니다.
상위 객체에서 사용시에는 유연성이 높게 <T>를 사용할 수 있지만
하위 객체에서는 범위가 좁고 명확해야만 합니다.
따라서 하위 class & method에서는 <T>사용이 좋지 않습니다.
반응형
'☕ 자바 JAVA > ☕ 변수와 자료형 Variables & Data Type' 카테고리의 다른 글
[JAVA]class를 array [ ]로 만들기 (0) | 2024.10.27 |
---|---|
[JAVA]데이터 타입 범위 MIN_VALUE & MAX_VALUE (0) | 2024.10.27 |
[JAVA]Map<Key, Value> (1) | 2024.09.29 |
[JAVA]배열 Array [ ] (0) | 2024.08.22 |
[JAVA]변수의 초기화 (1) | 2024.03.12 |