-
[JAVA] 자바 - 제네릭스(generics)란?Java/자바의정석 2023. 3. 8. 00:16반응형
제네릭스(generics)란?
다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스 컴파일시 타입 체크를 해주는 기능
객체 타입을 '컴파일 시' 체크하므로 안정성을 높이고 형변환의 번거로움을 줄인다.제네릭스 선언
// 일반 클래스 class Box { Object item; void setItem(Object item) {this.item = item;} Object getItem() {return item;} } // 제네릭 클래스 class Box<T> { T item; void setItem(T item) {this.item = item;} T getItem() {return item;} }
보다 더 이해가 쉽도록 아래의 코드를 보며 확인해보자.
해당 코드는 자바의정석 예제코드이다.
package JungSuk12; import java.util.*; class Product {} class Tv extends Product {} class Audio extends Product {} class Chap12_1 { public static void main(String[] args) { ArrayList<Product> productList = new ArrayList<Product>(); ArrayList<Tv> tvList = new ArrayList<Tv>(); productList.add(new Tv()); //public boolean add(product e) -> Tv를 집어넣었음 productList.add(new Audio()); tvList.add(new Tv()); tvList.add(new Tv()); printAll(productList); } public static void printAll(ArrayList<Product> list) { for (Product p : list) System.out.println(p); } }
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. 다형성
이와같이 참조변수와 생성자에 대입된 타입이 Product, Tv로 다른경우 에러가 발생한다.
제네릭스에서는 다형성이 적용되지 않는다는 점 알아두자.
productList.add(new Tv()); //public boolean add(product e) -> Tv를 집어넣었음 productList.add(new Audio());
productList에 TV와 Audio객체를 추가하는데 productList는 <Product>타입만 받는다고 선언해두었다.
Tv, Audio의 경우 Product의 자손이므로 에러없이 진행이된다.
tvList.add(new Tv()); tvList.add(new Tv());
tvList는 <Tv>의 타입을 받는다고 선언해두었다.
tvList.add(new Audio());
tvList에 Audio 객체선언한다면 에러가 발생한다. Audio와 Tv는 아무 관련이 없기때문이다.
반응형'Java > 자바의정석' 카테고리의 다른 글
자바[JAVA] - HashMap()개념 및 여러가지 메서드 (0) 2023.03.09 자바[JAVA] - treeset()개념 및 여러가지 기능들 (0) 2023.03.09 자바[JAVA] - Comparable과 Comparator의 이해 (0) 2023.02.28 자바 [JAVA] - HashSet개념 및 활용 (0) 2023.02.27 자바의정석 Comparator 활용하기 (0) 2023.02.27