제너릭에 대해서 아직 배우지않아서 콜렉션 프레임워크 List, Set, Map 등을 사용할 때, 깨름칙한 부분이 없지않아 있었다.
이 콜렉션 프레임워크는 항상 제너릭<>
을 같이 쓴다.
예를 들어서,
ArrayList<> list = new ArrayList<>();
이렇게도 생성할수있지만
ArrayList list = new ArrayList();
라고도 생성할 수 있다.
그리고
ArrayList의 부모가 List이기때문에 이렇게도 생성할수있다.
List list = new ArrayList();
List 내의 메소드들 add(), remove() 등은 기본적으로 Object 타입을 매개변수로 받는다.
그래서, List list = new ArrayList();
를 생성했다면,
list.add(new MyBook());
list.add(new MyMovie());
list.add(new MyCar());
등등 각기 다른 객체들을 넣을 수 있다.
그런데 문제는
타입이 다른 객체를 넣어 줄 수 있기 때문에
사용하는 입장에서 문제가 발생할 수도 있다.
무작위로 무작위 데이터타입의 클래스들이 들어갔기 때문에,
이걸 각기 어떤식으로 따로 사용할것이란 말인가?
어떤 자바사용자라도 이렇게 사용하고 싶진 않을것이다.
그과정에서 나온게 Generic이다
예를 들어서, 다음과 같이 선언했다고 치자.
List<MyBook> list = new ArrayList<MyBook>();
그러면 MyBook이라는 한가지타입만 리스트에 넣도록 제한할수있다.
한가지타입만 사용하기때문에 사용과정에서
upcasting이든 downcasting이든 일어나지않는다
참고로 제너릭을 설정안해주면 IDE에서도 노란줄이 뜨면서
제너릭을 사용하도록 권고한다.
질문:
List list = new ArrayList();
ArrayList list = new ArrayList();
List의 경우, 상속받아서 사용하는 것과 받지 않고 사용하는 경우는 어떤 점이 다르고 장점은 뭘까?
공부해봐야 할 사항:
Generic, Collections Framework