List 는 인터페이스
ArrayList 는 클래스 (List 인터페이스를 상속받아 만들어진 >> List 의 기능 모두 사용 가능)
List 는 Collection 의 하위 인터페이스
중복된 값을 저장할 수 있는 순서가 지정된 개체 모음
List 인터페이스는 ArrayList, LinkedList, Vector, Stack 클래스로 구현 가능
다양한 클래스를 구현하여 List 의 인스턴스 생성, 활용 가능
ArrayList 는 java.util 패키지에 포함된 Collection 프레임워크의 일부
동적인 배열 제공하는 클래스
int, char 등의 기본 데이터타입을 활용하기 위해선 wrapper 클래스 사용 (Integer, Char)
List | ArrayList |
인터페이스 | 클래스 |
인스턴스화 불가능 (인터페이스이기 때문에) | 인스턴스화 가능 |
Collection framework 의 확장 | AbstractList 클래스 확장, List 인터페이스 구현 |
List 인터페이스는 Index 와 연결된 요소 List 를 생성 | 객체를 포함하는 동적 배열을 만드는데 사용 |
시퀀스로 저장되는 요소 컬렉션 생성, Index 사용하여 식별 및 접근 | 배역이 동적으로 커질 수 있는 객체배열 |
ArrayList list = new ArrayList<>();
위와 같이 ArrayList 인스턴스를 생성하면, 나중에 데이터의 용도가 바뀌어 삽입/삭제가 유리한 LinkedList 구조로 변경해야 할 때, ArrayList 로 선언된 모든 부분을 LinkedList 로 수정해야 함
또한 ArrayList 에서는 지원하지만, LinkedList 에선 지원하지 않는 메서드는 더이상 사용하지 못함
이는 코드 유지/보수에 있어 유연하지 못한 구조
List list = new ArrayList<>();
위와 같이 사용한다면, 같은 상황에서 new ArrayList 인스턴스 생성 부분만 수정하고, 다른 부분에 대한 변경 필요 X
이게 바로 업캐스팅 하여 사용하는 이유
추가적으로
대부분의 경우 ArrayList 만 제공하는 메서드는 사용을 지양한다
>> 다른 List 로 바꿔야 할 경우 수정이 힘들기 때문에
List 로 선언해야 List 에서 제공하는 메서드까지 사용이 가능하기 때문에
'끄적 > ?' 카테고리의 다른 글
업캐스팅 다운캐스팅 (0) | 2023.08.27 |
---|---|
Generic (0) | 2023.08.27 |
String, StringBuffer, StringBuilder (0) | 2023.08.27 |
Java 메모리 구조, JVM 동작 방식 (0) | 2023.08.27 |
추상클래스 인터페이스 (0) | 2023.03.12 |