// ArrayList
ArrayList<String> arrList = new ArrayList<String>();
// List
List<Integer> list = new ArrayList<Integer>();
현재 ArrayList를 보면 <>안에 String, List에는 <>안에 int형을 나타내는 Integer가 들어가 있다.
이 <>를 제네릭(Generics)이라 하는데, 이 <>안에 어떠한 타입을 선언해주어 해당 ArrayList, List 등이 사용할 객체의 타입을 지정해준다는 뜻이다.
이는 다룰 객체의 타입을 미리 명시하여 객체의 형변환을 사용할 필요없게 하며, 내가 사용하고 싶은 데이터 타입만 사용할 수 있게 해주는 효과가 있습니다.
import java.util.ArrayList;
import java.util.List;
public class Generics {
public static void main(String[] args) {
ArrayList<String> arrList = new ArrayList<String>();
arrList.add("박지성");
arrList.add("손흥민");
arrList.add("기성용");
for(int i=0; i<arrList.size(); i++){
System.out.println("arrList : " + arrList.get(i));
}
List<Integer> list = new ArrayList<Integer>();
list.add(123);
list.add(456);
list.add(789);
for(int i=0; i<list.size(); i++){
System.out.println("list : " + list.get(i));
}
}
}
ArrayList는 String으로 선언해주어, ArrayList는 String 객체만 다루게 되며,
List는 Integer로 선언해주어, List는 int형 객체만 다루게 됩니다.
제네릭(Generics)은 컬렉션에서만 사용되는 개념이 아니고 클래스, 인터페이스 등 다양하게 사용될 수 있다.
public class Generics {
public static void main(String[] args) {
ArrayList<Sports> arrList = new ArrayList<Sports>();
arrList.add(new Sports()); //부모 클래스 본인 뿐만아니라 Soccer와 Baseball 객체도 부모클래스 타입으로 선언된 ArrayList에 저장될 수 있다.
arrList.add(new Soccer()); //이는 바로 제네릭(Generics)의 다형성으로 부모클래스로부터 상속을 받았기에 가능한것이다.
arrList.add(new Baseball());
Sports sports = arrList.get(0);
Soccer soccer = (Soccer) arrList.get(1);
}
}
class Sports{}
class Soccer extends Sports{}
class Baseball extends Sports{}
//Sports클래스는 부모 클래스로 하위(자식)클래스인 Soccer, Baseball 클래스가 부모클래스를 상속받고 있다.