제네릭스란?
- 컴파일시 타입을 체크해주는 기능
ArrayList<TV> tvList = new ArrayList<TV>();
tvList.add(new TV()); // OK
tvList.add(new Audio()); // ERROR!
Tv tv = (TV)tvList.get(0); //컴파일러가 이미 TV타입의 ArrayList임을 알고 있으므로
Tv tv = tvList.get(0); //이렇게 형 변환 안해줘도 된다.
장점:
- 타입 안정성을 제공한다.
- 타입체크와 형변환을 생략할 수 있으므로, 코드가 간결해진다.
타입변수
-클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용.
public class ArrayList extends AbstractList{
private transient Object[] elementData;
public booleam add (Object o) { ... };
...
}
//아래와 같이 Object타입 대신 타입변수 E사용
public class ArrayList<E> extends AbstractList<E>{
private transient E[] elementData;
public booleam add (E o) { ... };
...
}
타입 변수에 대입하기
-객체를 생성시, 타입변수(E) 대신 실제 타입(TV)을 지정(대입)
//타입 변수 E 대신에 실제 타입 TV를 대입
ArrayList<TV> tvList = new ArrayList<TV>();
위와 같이 하면 ArrayList의 타입변수 E가 TV로 바뀐다.
public class ArrayList<E> extends AbstractList<E>{
private transient E[] elementData;
public booleam add (E o) { ... };
...
}
//아래처럼 E가 TV로 바뀐다.
public class ArrayList<TV> extends AbstractList<TV>{
private transient TV[] elementData;
public booleam add (TV o) { ... };
...
}
EX)
import java.util.ArrayList;
import java.util.List;
public class EX01 {
public static void main(String[] args) {
List<TV> tvList = new ArrayList<TV>(); //TV 타입만 저장가능
tvList.add(new TV());
// tvList.add(new Audio());// ERROR!
TV tv = tvList.get(0); // 형변환 안해줘도 된다.
}
}
출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS
'java' 카테고리의 다른 글
Generics 03 Iterator, HashMap과 제네릭스 (0) | 2022.01.03 |
---|---|
Generics 02 제네릭스 용어, 제네릭 타입과 다형성 (0) | 2022.01.02 |
Lambda 07 Collector (0) | 2021.12.30 |
Optional (0) | 2021.12.30 |
Lambda 06 Stream의 연산 (중간 연산과 최종 연산) (0) | 2021.12.29 |