🌱 오늘의 주제 : 지네릭스(Generics)
🌱 지네릭스(Generics)
- 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능
- 타입 안정성을 제공한다.
- 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
ArrayList<Tv> tvList = new ArrayList<Tv>();
tvList.add(new Tv());
Tv t = tvList.get(0); // 형변환 불필요
🌱 지네릭 타입과 다형성
- 지네릭 클래스의 객체를 생성할 때, 참조변수에 지정해준 지네릭 타입과 생성자에 지정해 준 지네틱 타입은 일치해야 한다.
ArrayList<Tv> liest = new ArrayList<Tv>(); // 일치
- 지네릭 타입이 아닌, 클래스 타입 간에 다형성을 적용하는 것은 가능하다. 이 경우에도 지네릭 타입은 일치해야 한다.
List<Tv> list = new ArrayList<Tv>(); // OK. 다형성. ArrayList가 List를 구현
List<Tv> list = new LinkedList<Tv>(); // OK. 다형성. LinkedList가 List를 구현
- ArrayList에 Product의 자손 객체만 저장하는 것도 가능하다.
- 지네릭 타입이 Product인 ArrayList를 생성하고, Product의 자손인 Tv와 Audio의 객체를 저장하면 된다.
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Product()); // 조상
list.add(new Tv()); // OK. 자손
list.add(new Audio()); // OK. 자손
- 대신에 ArrayList에 저장된 객체를 꺼낼 때, 형변환이 필요하다.
Product p = list.get(0); // Product 객체는 형변환이 필요없다.
Tv t = (Tv)list.get(1); // Product의 자손객체들은 형변환이 필요하다.
🌱 지네릭 타입과 다형성 예제
package chapter12;
import java.util.ArrayList;
import java.util.List;
class Product {}
class Tv extends Product {}
class Audio extends Product {}
public class Ex12_1 {
public static void main(String[] args) {
// 지네릭 타입과 다형성 예제
ArrayList<Product> productList = new ArrayList<Product>();
ArrayList<Tv> tvList = new ArrayList<Tv>();
// ArrayList<Product> tvList = new ArrayList<Tv>(); // 에러. 지네릭 타입 불일치
// List<Tv> tvList = new ArrayList<Tv>(); // OK. 다형성 . 지네릭 타입 일치
productList.add(new Tv());
productList.add(new Audio());
tvList.add(new Tv());
tvList.add(new Tv());
printAll(productList);
// printAll(tvList); // 컴파일 에러, 지네릭 타입 불일치
}
public static void printAll(ArrayList<Product> list) {
for (Product p : list)
System.out.println(p);
}
}
-----
chapter12.Tv@1be6f5c3
chapter12.Audio@6b884d57
'Java' 카테고리의 다른 글
Java - 지네릭 메서드와 형변환 (2) | 2023.03.08 |
---|---|
Java - 제한된 지네릭 클래스 & 와일드 카드 (0) | 2023.03.07 |
Java - Math클래스 (0) | 2023.03.02 |
Java - StringBuffer클래스 (0) | 2023.03.01 |
Java - String클래스 (0) | 2023.02.28 |