😀이번 포스팅은 스터디그룹에서 주제로 "List, Set, Map, HashMap을 비교해서 설명해보자"였는데, 얼핏보면 일반적인 비선형 자료구조를 이야기하는거 같지만, 그렇게 비교하게 된다면 "List, Set, Map, HashTable"일텐데 마지막 "HashMap" 걸려서 검색해보니 JAVA 컬렉션 프레임워크에서 제공하는 자료구조라고 한다. JAVA는 아직 안 써봤으니 가볍게 알아보도록 하자
컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 모아놓은 것을 컬렉션 프레임워크라고 한다.
컬렉션 프레임워크는 아래의 3가지 요소로 구성된다.
인터페이스 (Interfaces)
각 컬렉션을 나타내는 추상 데이터에 대한 인터페이스 (List, Set, Map 등).
클래스는 이 인터페이스를 구현하는 방식으로 작성되었기 때문에 상세 동작은 달라도 일관된 조작법으로 사용할 수 있다.
클래스 (Classes)
컬렉션 별 인터페이스의 구현 (Implementation).
위에서 언급했듯, 같은 List 컬렉션이더라도 목적에 따라 ArrayList, LinkedList 등으로 상세 구현이 달라질 수 있다.
알고리즘 (Algorithms)
컬렉션이 제공하는 연산, 검색, 정렬, 셔플 (Shuffle) 등에 대한 메소드.
검정색은 인터페이스, 파랑색은 클래스, 실선 화살표는 상속, 점선 화살표는 구현을 의미한다.
대표적으로 List , Queue , Set , Map 인터페이스로 구성되어 있으며, 세부적으로 여러 클래스가 해당 인터페이스를 구현하거나, 다른 인터페이스가 상속받는 구조로 되어있다.
List, Set, Map, HashMap 네가지는 컬렉션 프레임워크에서 모두 제공하기 때문에 공통점이 존재하고, 각자의 특징이 따로 있어 차이점 또한 존재한다. 공통점과 차이점을 알아보자
모두 데이터를 저장하고 관리하는 자료구조이다.
모두 제네릭 클래스로 구현되어 있어, 타입 안정성을 보장한다.
모두 자바 컬렉션 프레임워크의 일부이며, 표준 라이브러리에서 제공한다.
List | Set | Map | HashMap | |
---|---|---|---|---|
구현 | 인터페이스 | 인터페이스 | 인터페이스 | 클래스 |
중복 | 허용 | 불가 | Key 불가, Value 허용 | Key 불가, Value 허용 |
순서 | 유지 | 유지불가 | Key의 순서는 유지불가, Value의 순서는 유지 | 유지불가 |
검색 | 가능 | 가능 | Key와 Value 따로 검색 가능 | Key와 Value 따로 검색 가능 |
삽입 | 가능 | 가능 | Key-Value 쌍으로 삽입 가능 | Key-Value 쌍으로 삽입 가능 |
삭제 | 가능 | 가능 | Key로 삭제 가능, Key-Value 쌍으로 삭제 가능 | Key로 삭제 가능, Key-Value 쌍으로 삭제 가능 |
확장성 | 크기 조정 불가 | 크기 조정 불가 | 크기 조정 불가 | 크기 조정 가능 |
성능 | 느림 | 중간 | 중간 | 빠름 |
가장 눈에 띄는 차이의 항목은 중복의 가능성과 순서 유무이다.
List는 중복을 허용하고, Set은 허용하지 않는다, Map과HashMap은 값에 대해서만 허용한다.
List는 순서가 있고, Set은 없다, Map은 값에만 순서가 있으나, 클래스인 HashMap은 순서가 없다.
참고자료(출처)
TPC School JAVA 컬렉션 프레임워크의 개념
hudi.blog 포스팅 JAVA Collection Framework (1) - 컬렉션 프레임워크란?
깃허브io Hyun-Taek Hong 포스팅 [Java 25] 자바 - 컬렉션 프레임워크 (1)