728x90
Generics(지네릭)은 컴파일 시 타입을 체크해주는 기능으로 JDK 1.5부터 적용되었다.
실행시 발생하는 에러를 컴파일 시 체크하여 에러 발생을 사전에 방지할 수 있다.
장점
1. 타입 안정성을 제공한다.
2. 타입체크와 형변환을 생략할 수 있어 코드가 간결해진다.
Generics 개념을 이해하는 예제이다.
import java.util.ArrayList;
import java.util.List;
class Product {}
class Tv extends Product {
// Product Class는 Tv Class의 부모 클래스
}
class Audio extends Product {
// Product Class는 Audio Class의 부모 클래스
}
public class GenericsEx1 {
public static void main(String[] args) {
// 일반 클래스 (JDK 1.5 이전 방식)
ArrayList arrayList = new ArrayList();
arrayList.add(new Tv());
arrayList.add(new Audio());
Tv t = (Tv) arrayList.get(0); // arrayList 의 첫번째 요소를 꺼낸다.
// arrayList.get(0) 는 object 타입이므로 Tv 타입으로 형변환을 해줘야 한다.
Audio audio = (Audio) arrayList.get(1); // arrayList 의 두번째 요소를 꺼낸다.
// arrayList.get(1) 는 object 타입이므로 Audio 타입으로 형변환을 해줘야 한다.
// 지네릭 클래스 : JDK 1.5 부터 적용
ArrayList<Product> productList = new ArrayList<Product>();
// 타입변수 : 참조변수의 타입 매개변수와 생성자의 타입 매개변수는 일치해야 한다.
// 즉, 참조변수와 생성자의 대입된 타입은 일치해야 한다.
// ArrayList : 원시타입, Product : 타입 변수 또는 타입 매개변수
// ArrayList<Product> : 지네릭 클래스
productList.add(new Tv());
productList.add(new Audio());
Tv t2 = (Tv) productList.get(0);
// productList.get(0) 의 타입이 Product 이므로 불일치하여 형변환 해줘야 한다.
Audio audio2 = (Audio) productList.get(1);
// productList.get(1) 의 타입이 Product 이므로 불일치하여 형변환 해줘야 한다.
printAll(productList);
// 지네릭 클래스
// JDK 1.7 부터 생성자에 타입변수 생략 가능
ArrayList<Tv> tvList = new ArrayList<>();
tvList.add(new Tv()); // Tv 타입의 객체만 저장 가능
tvList.add(new Tv());
//tvList.add(new Audio()); // Audio 는 TV의 자손이 아니므로 에러 발생
//printAll(tvList); // 컴파일 에러가 발생한다.
// new ArrayList<Tv>() 객체 타입 Tv과 printAll 메소드의 매개변수 타입 Product 불일치로 에러 발생
// List 와 ArrayList 의 관계는 조상과 자손의 관계이며,
// 조상의 참조변수로 자손의 객체 생성하는 것은 가능하다.(다형성)
List<Tv> tvList1 = new ArrayList<Tv>(); // OK. 다형성
tvList1.add(new Tv());
tvList1.add(new Tv());
}
private static void printAll(ArrayList<Product> list) {
for (Product p : list)
System.out.println(p);
}
}
|
728x90
'안드로이드 > Java 문법' 카테고리의 다른 글
[Java] Stream 예제 2 (0) | 2021.11.16 |
---|---|
[Java ] Stream 예제 (0) | 2021.11.15 |
HashMap 예제 (0) | 2021.10.30 |
[Java] HashSet 를 이용한 ArrayList 중복제거 및 정렬 (0) | 2020.12.12 |
[Java] HashSet 를 이용한 ArrayList 중복제거 및 단순 정렬 (0) | 2020.12.12 |