https://claremont.tistory.com/category/Computer%20Science/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0
https://claremont.tistory.com/category/Computer%20Science/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
(자료구조와 알고리즘 개념이 잡혀있어야 한다)
컬렉션 프레임워크(Collection Framework): 데이터를 저장하고 조작하는 데 유용한 자료구조와 알고리즘을 제공하는 표준화된 라이브러리
이 프레임워크는 데이터를 효율적으로 다루기 위해 다양한 인터페이스와 그 구현체들을 포함하고 있으며, 여러 자료구조(리스트, 세트, 맵 등)와 그에 따른 알고리즘을 사용하기 쉽게 만들어져 있다
[컬렉션 프레임워크의 구성]
1. 인터페이스(Interfaces)
인터페이스는 컬렉션의 핵심 개념을 정의하며, 이를 통해 컬렉션의 다양한 동작을 규정한다. 대표적인 인터페이스로는 Collection, List, Set, Queue, Map 등이 있다.
2. 구현체(Implementations)
인터페이스는 실제 구현체들을 통해 사용된다. 각 구현체는 특정한 성능 특성에 맞추어 제공된다. 예를 들어, ArrayList는 배열 기반으로 랜덤 액세스가 빠르지만, 요소를 중간에 삽입하거나 삭제하는 작업이 느릴 수 있다. 반면 LinkedList는 이러한 작업에 유리하지만, 인덱스 기반 접근은 느리다.
3. 알고리즘(Algorithms)
컬렉션 프레임워크는 정렬, 검색, 복사 등 다양한 알고리즘을 제공하며, 대부분 Collections 클래스에 정적 메서드로 구현되어 있다.
- 정렬: Collections.sort() 메서드를 사용하여 리스트를 정렬
- 검색: Collections.binarySearch()를 사용하여 정렬된 리스트에서 이진 검색을 수행
- 반복(iteration): Iterator나 for-each 문을 통해 컬렉션의 요소를 순차적으로 처리
[주요 인터페이스와 주요 구현체들]
1. Collection 인터페이스
Collection 인터페이스는 java.util 패키지의 컬렉션 프레임워크의 핵심 인터페이스 중 하나이다. 이 인터페이스는 자바에서 다양한 컬렉션, 즉 데이터 그룹을 다루기 위한 메서드를 정의한다. Collection 인터페이스는 List, Set, Queue 와 같은 다양한 하위 인터페이스와 함께 사용되며, 이를 통해 데이터를 리스트, 셋, 큐 등의 형태로 관리할 수 있다. (Collection 인터페이스는 모든 컬렉션의 기본이 되는 인터페이스로, Java에서 제공하는 대부분의 컬렉션 클래스는 이 인터페이스를 구현한다.)
2. List 인터페이스 (순서 O, 중복 O)
- List는 순서가 있는 요소들의 집합을 다루며, 중복을 허용
- 인덱스를 통해 요소에 접근할 수 있으며, 삽입 순서가 보장
- e.g. 장바구니 목록, 순서가 중요한 일련의 이벤트 목록
- 주요 구현체:
- ArrayList: 배열 기반의 리스트로, 랜덤 액세스가 빠르고, 크기가 자동으로 조정
- LinkedList: 이중 연결 리스트로, 삽입과 삭제가 빈번한 경우 유리
3. Set 인터페이스 (순서 X, 중복 X)
- Set(집합)은 중복을 허용하지 않는 데이터 집합을 다룰 때 사용
- 순서가 중요한 경우가 아니거나 중복을 제거하고자 할 때 사용
- e.g. 회원 ID 집합, 고유한 항목의 집합
- 주요 구현체:
- HashSet: 해시 기반의 Set으로, 순서 보장 X
- LinkedHashSet: 삽입된 순서를 유지하는 HashSet
- TreeSet: 이진 트리 구조를 사용해 요소들이 자동으로 정렬된 순서를 가지는 Set
4. Map 인터페이스 (순서 X, key: 중복 X / value: 중복 O)
- Map은 키(key)와 값(value)의 쌍으로 이루어진 데이터를 다룰 때 사용 (사전 ADT 개념에 부합)
- 키는 중복을 허용하지 않으며, 각 키는 하나의 값과만 연결
- 주요 구현체:
- HashMap: 해시 기반의 Map으로, 순서를 보장하지 않으며 매우 빠른 검색 속도를 자랑
- LinkedHashMap: 삽입된 순서를 유지하는 HashMap
- TreeMap: 이진 트리 구조를 사용해 키들이 자동으로 정렬된 Map
- Hashtable: HashMap과 유사하지만 스레드 안전(synchronized)
5. Queue 인터페이스 (순서 O, 중복 O)
- Queue는 FIFO(First-In-First-Out) 방식으로 요소를 처리하는 자료구조
- 주로 작업을 대기열 방식으로 처리하는 데 사용
- 주요 구현체:
- Deque 인터페이스: 양쪽에서 삽입과 삭제가 가능한 큐
- - ArrayDeque
- - LinkedList
[모든 컬렉션 인터페이스에서 공통적으로 사용할 수 있는 기본 뼈대 메서드]
- add(E e): 컬렉션에 요소 추가
- remove(Object o): 컬렉션에 특정 요소 제거
- size(): 컬렉션에 저장된 요소 개수 반환
- isEmpty(): 컬렉션이 비어 있는지 여부 반환
- contains(Object o): 특정 요소가 컬렉션에 있는지 확인
- iterator(): 컬렉션 요소에 접근하기 위한 반복자를 반환
- clear(): 컬렉션의 모든 요소 제거
※ Map 인터페이스는 컬렉션 인터페이스를 상속받지 않아 add() 대신 put()을 쓴다
(참고) Vector 자료구조는 현재 아예 사용하지 않는다. 또한 Stack 클래스가 이 Vector 자료구조를 이용하기 때문에 Stack 클래스도 사용하지 않고, 대신 Deque 인터페이스를 사용한다
참고 및 출처: 김영한의 실전 자바 - 중급 2편
'Language > Java' 카테고리의 다른 글
[Java API] Set 인터페이스(HashSet, LinkedHashSet, TreeSet) (0) | 2024.09.19 |
---|---|
[Java API] List 인터페이스(ArrayList, LinkedList) (0) | 2024.09.19 |
[Java] 제네릭은 처음부터 있었던 문법이 아니다(feat. raw type, type eraser) (1) | 2024.09.16 |
[Java API] 예외계층구조 핵심 그림 (0) | 2024.09.16 |
[Java] 중첩 클래스에 대한 고찰 (0) | 2024.09.09 |