List<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list = new ArrayList<Integer>();
: 인터페이스 (도형)
List를 자료형으로 선언한 경우, 구현체를 ArrayList로도 구현할 수 있지만 LinkedList로 구현할 수 있다.
List<Integer> list = new ArrayList<Integer>();
list = new LinkedList<Integer>(); // 구현체 호환 가능
: List 인터페이스를 구현한 클래스 (정사각형)
ArrayList를 자료형으로 선언한 경우, LinkedList를 생성하거나 형변환을 할 수 없다.
ArrayList<Integer> list = new ArrayList<Integer>();
list = new LinkedList<Integer>(); // error 발생
List는 인터페이스, ArrayList는 List를 구현한 클래스
List로 선언을 한 경우,
인스턴스를 ArrayList로 받을 수 있고 LinkedList로 받을 수 있다.
ArrayList, LinkedList 둘 다 List 인터페이스를 구현했기 때문이다.
ArrayList로 선언한 경우,
ArrayList의 인스턴스를 만들어야 하므로 ArrayList로 받아야 한다.
LinkedList로는 ArrayList를 인스턴스를 만들 수 없기 때문이다.
참고 블로그
https://yoon-dailylife.tistory.com/7
https://velog.io/@dnwlsrla40/List-ArrayList-%EB%B0%B0%EC%97%B4-%EC%84%A0%EC%96%B8-%EC%8B%9C-List%EC%99%80-ArrayList-%EC%B0%A8%EC%9D%B4