자바에서는 내가 직접 extends하지 않아도 object를 부모로 갖는다.
object는 자바의 최상위클래스이기 때문이다.
object로 인해서 뭐든 일괄처리할 수 있다.
예를 들어 1)
Object[] list = new Object[10];
list[0] = 3;
list[1] = "hello";
list[3] = 35.7;
list[4] = new Hello();
1)에서 의아한 점은 3은 참조형식이 아닌데 참조를 하고 있다는 점이다.
Object obj = 3;
위 코드는 boxing이 필요하다.
Object obj = new Integer(3);
처럼 말이다. 이는 컴파일러가 자동으로 해주며 auto boxing이라 한다. 이처럼 boxing해줄 경우 Integer를 wrapper 클래스라한다.
즉, 자바의 기본형식은 모두 wrapper클래스가 될 수 있다.
이렇게 boxing으로인해 문제가 해결 됐으니 object를 사용하여 일괄처리를 마음껏 할 수 있게 되었다.
하지만 1)처럼 object로 모든 형식을 섞어서 담기 보다는 한종류로만 담는 것이 더 효율적일 것이다.
2)
List list = new ArrayList();
list.add(10);
list.add("string");
list.add(2.5);
2)에서 컬렉션 list는 object형으로, 모든 형식의 데이터가 들어갈 수 있다. 이는 여러 문제가 발생하고 비효율적이다.
문제를 해결하기 위해 나온 것이 Generic이다.
3)
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(35);
list.add(25);
Generic으로 list에 들어갈 수 있는 데이터의 형식을 integer로 한정하였다.
이제는 컬렉션에 한 종류의 데이터만 넣을 수 있게 되었다.