List <Object> list = new ArrayList <>();
아무 생각없이 위 구조의 형식으로 항상 리스트를 생성하였었는데, 문득 List와 ArrayList의 차이가 뭐지? 하고 궁금해졌다.
그래서 검색을 해봤더니, ArrayList는 class고, List는 interface다. interface는 공통되는 메서드를 추출해 놓은 클래스로 생각하면 된다.
라는 글을 보았는데 궁금증이 해소되지 않았고 더 검색을 해보았다.
- ArrayList <Object> list = new ArrayList <>();
- List <Object> list = new ArrayList <>();
위의 두 코드는 모두 같은 결과를 도출하지만, List를 사용해 ArrayList를 생성하는 것은 유연성에서 효과를 볼 수 있다고 합니다.
그럼 어떤 유연성에서 효과를 본다는 말일까?
여기서 Generic(제너릭)이라는 개념이 등장하게 되는데,
Generic은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다.
쉽게 말하면, 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic)타입이라고 할 수 있습니다.
여기서 잠깐 ArrayList(배열리스트)와 Array(배열)의 간단 차이점!!
ArrayList는 표준 Java에서 정적 배열의 문제를 극복합니다. 즉, 배열은 일단 만들어지면 크기가 커질 수 없습니다.(크기가 정해져있음) ArrayList를 사용하여 배열을 만들면 필요할 때 크기가 커지고 작아 질 수있는 동적 배열이 만들어집니다.
그래서 List와 ArrayList의 차이점에 대한 결론은 뭐야?
자바의 다형성에 관련하여 얘기해보면,
클래스를 생성할 때 도형 타입으로 생성하게 되면 정사각형이 아닌
다른 직사각형, 삼각형 등 도형 인터페이스를 구현한 클래스에서 사용될 수 있습니다.
하지만 정사각형 클래스로 생성하게 되면 직사각형, 삼각형 등 에서는 사용할 수 없습니다.
이 개념을 도형에 비유하여 풀어보면,
List list = new ArrayList();
-> 도형 list = new 정사각형();
ArrayList list = new ArrayList();
-> 정사각형 list = new 정사각형();
정리하자면 List는 인터페이스이고 arrayList는 List에 상속된 클래스라고 보면 된다.
따라서, ★arrayList는 단독으로 사용할 수 없으며 사용시 List 인터페이스를 상속받고 사용해야 합니다.
https://yoon-dailylife.tistory.com/7를 참고하여 작성하였습니다.
'Languages | Frameworks > Java' 카테고리의 다른 글
Java) 2차원 배열 오름차순 정렬(Arrays.sort 람다식) (0) | 2023.01.27 |
---|---|
Java) HashMap의 computeIfAbsent에 대해(feat. getOrDefault) (0) | 2023.01.27 |
JPA, JPQL (0) | 2022.09.27 |
암호화 알고리즘 종류와 추천(SHA, PBKDF2, Bcrypt) + Java 적용 샘플 (0) | 2022.07.18 |
게시판 글이 중간에 삭제시 > 번호 초기화후 인덱싱 하는 방법 (0) | 2022.07.13 |