JAVA 에서 arrayList 와 List 의 차이가 무엇인지 궁금합니다 !!
JAVA 에서 arrayList 와 List 의 차이가 무엇인지 궁금합니다 !!
둘 다 그냥 배열? 같은 느낌인것으로 보이는데...
두개의 차이가 있나요??
있다면 어떠한것이며 어떠한 경우에 arrayList를 사용하고 어떤 경우에 List 를 사용하는지 궁금합니다.
ArrayList 는 class 이고 List 는 interface 입니다.
클래스나 인터페이스 둘 다 타입의 형태이지만 사용하는 용도가 다릅니다.
인터페이스의 경우 어떤 기능(메서드)를 제공할지 알려주는 목적으로 사용합니다.
반면 클래스는 기능에 대한 실질적인 구현을 위해 사용을 합니다.요약을 하면 ArrayList는 List를 구현한 구현체의 종류라고 생각하시면 됩니다.
따라서 List는 직접적으로 인스턴스화 할 수 없습니다. 코드로 설명하면 아래와 같은 코드는 에러가 발생한다는 것입니다.
List<String> list = new List<>(); // Error!반면 ArrayList는 구체 클래스이므로 아래와 같이 사용이 가능합니다.
List<String> list = new ArrayList<>(); // OK!그렇다면 왜 인터페이스와 클래스를 나누어놓았나 의문이 생기게 됩니다.
자바 document 에서 찾아보면 List 인터페이스를 구현한 목록을 볼 수 있습니다.All Known Implementing Classes:AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
참고로 Abstract 가 앞에 붙은 것은 추상 클래스라 인스턴스를 바로 구현할 수는 없습니다.
일반적이라면 ArrayList로 구현체를 사용하는데 크게 문제가 없을 것 입니다.
만약 구체 타입으로 메서드나 타입을 접근을 한다고 하면 구현체의 변경이 발생할 경우 모두 일일이 바뀌어야 합니다.만약 List라는 인터페이스라는 타입으로 레퍼런스를 하고 있다면 해당 구현체만 바꾸어주면 되므로 변경에 대해 열려있게 됩니다.
List 는 인터페이스 라서 단독으로는 사용할 수 없습니다.
ArrayList는 List 인터페이스 에 선언된 추상메소드(구현이 없는 메소드)를 구현한 클레스 중에 하나구요.
보통은 List list = new ArrayList<>(); 형식으로 많이 사용하죠.
ArrayList는 인덱스 형태로 접근할 수 있어서 List 인터페이스 구현체 중에서 아마 제일 많이 사용되는 클레스 중에 하나일 겁니다.
List 에 들어가는 요소를 순서대로 넣고 그 순서에 맞는 값을 가져오고 싶을때 주로 사용합니다.
요약하면..
List 에 선언된 추상메소드를 구현한 클레스 중에 하나가 ArrayList 이구요.
주로 추가하는 요소를 순서대로 접근하거나 순서번호(인덱스)로 접근해서 사용하고 싶을때 씁니다.
감사합니다. ^^
안녕하세요.
Java에서 List는 명세상 Interface이며, ArrayList는 Class 입니다.
계층 구조로 표현한다면 List가 최상위 계층이며, List를 상속받아서 구현한 객체가 ArrayList, LinkedList 등이 있습니다.
Interface를 사용하는 이유는 해당 클래스는 최소 기능 (메소드) 이 반드시 구현해야 하는 것을 강제하는 의미가 있습니다.
/* - ArrayList는 new로 인스턴스를 만들 수 있지만 List는 new List 처럼 사용할 수 없습니다. - ArrayList는 List를 상속 받았기 때문에 list, list2 모두 사용할 수 있습니다. - list는 List에서 정의한 메소드를 사용할 수 있으며, list2는 List에서 정의한 메소드 및 ArrayList에서 정의한 메소드도 사용할 수 있습니다. */ List<String> list = new ArrayList<>(); ArrayList<String> list2 = new ArrayList<>();