- List = 인터페이스
- ArrayList = 클래스
interface는 공통되는 메서드를 추출해 놓은 클래스로, List 안에 ArayList, LinkedList. 등이 포함되어 있다.
ArrayList<Object> list = new ArrayList<>();
List<Object> list = new ArrayList<>();
위의 두 코드의 차이는 무엇일까?
2가지 모두 같은 결과를 도출한다. 하지만 List 를 사용해 ArrayList 를 생성하는 것은 유연성에서 효과를 볼 수 있다.
여기서 Generic(제너릭)에 대한 개념이 나온다.
만약에 우리가 어떤 자료구조를 만들어서 배포하려고 한다.
그런데 String 타입고 지원하고 싶고 Integer 타입도 지원하고 싶고 많은 타입은 지원하고 싶다.
그러면 String에 대한 클래스, Integer에 대한 클래스를 하나하나 타입에 따라 만들건가?
그건 너무 비효율적이다. 이러한 문제를 해결하기 위해 Generic(제너릭)이라는 것을 사용한다.
Generic(일반)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다.
한마디로 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 타입이다.
즉, 이러한 인스턴스의 형 변환을 통해 내부 디테일과 메모리 함축에서 이점과 성능을 개선시킬 수 있습니다.
- List<Object> list new List<>();
- List<Object> list = new LinkedList<>();
List list = new ArrayList();
-> 도형 list = new 정사각형();
ArrayList list = new ArrayList();
-> 정사각형 list = new 정사각형();
데이터의 삽입이나 삭제가 필요한 상황에서 List로 선언한 인스턴스를 LinkedList로 바꾸게 되면 아무런 문제 없이 LinkedList의 장점을 취할 수 있다.