봄봄.devlog
Java Collection Framework (JCF) 본문
Collection Framework란?
◇ Class Library
자주 사용하는 클래스들을 jar 파일로 묶어 놓은 것을 클래스 라이브러리(class library)라고 부른다. JDK에 포함된 클래스 라이브러리를 Java 표준 클래스 라이브러리라고 부른다.
◇ Framework
클래스 라이브러리 중에서 규모가 좀 크고, 클래스들의 구조가 간단하지 않은 것들을, 프레임웍 클래스 라이브러리(framework class library)라고 부른다. 간단히 줄여서 (framework)이라고 부르기도 한다.
framework에서 중요한 부분은 라이브러리 규모가 크다는 점 보다, 클래스들이 서로 연결되고 실행되는 구조가 단순하지 않고 세련되었다는 점이다.
즉, 객체지향적으로 세련된 구조를 갖는 클래스 라이브러리를 간단히 프레임웍이라고 부른다.
◇ Collection Class
내부에 자료 목록을 보관하기 위한 클래스를 Collection 클래스라고 부른다.
컬렉션 클래스에 보관할 수 있는 자료는 참조형이어야 한다.
기본 자료형은 컬렉션 클래스에 보관할 수 없다.
기본 자료형을 컬렉션에 보관할 때는, 자동으로 참조형으로 변환되어 보관된다. (auto-boxing)
우리가 잘 알고 있는 ArrayList 클래스가 바로 대표적인 컬렉션 클래스이다.
ArrayList 뿐만 아니라 많은 컬렉션 클래스들이 Java 표준 라이브러리에 포함되어 있다.
LinkedList 클래스, Stack 클래스도 대표적인 컬렉션 클래스이다.
◇ Collection Framework
Java 표준 라이브러리에 포함된 컬렉션 클래스들의 수가 많고, 그 구조가 간단하지 않기 때문에, 이들을 Collection Framework 이라고 부른다.
Collection Framework 구성요소
◇ Interfaces
컬렉션 클래스들을 서로 호환되는 몇 개의 그룹으로 나눌 수 있다.
각 그룹을 대표하는 java interface 들이 있다.
예를 들어 List 그룹을 대표하는 것은 List interface이고,
Deque 그룹을 대표하는 것은 Deque interface 이고,
Map 그룹을 대표하는 것은 Map interface 이다.
◇ implementations
컬렉션 클래스 그룹에 속하는 클래스들은 그 그룹 대표 java interface를 구현(implements)해야 한다.
예를 들어 List 그룹을 대표하는 것은 List interface 이다.
이 그룹에 속하는 ArrayList 클래스와 LinkedList 클래스는 이 List interface를 구현했다.
Deque 그룹을 대표하는 것은 Deque interface 이다.
이 그룹에 속하는 ArrayDeque 클래스는 Deque interface를 구현했다.
Map 그룹을 대표하는 것은 Map interface 이다.
이 그룹에 속하는 HashMap 클래스는 Map interface를 구현했다.
* 각 그룹에 속하는 클래스들은 그 그룹의 대표 Interface를 구현했기 때문에 서로 호환된다.
◇ Algorithms
collection class 들을 대상으로 정렬(sorting), 탐색(searching) 등의 연산을 구현한 메소드들을 collection framework의 algorithms 라고 부른다. 이 알고리즘 메소드들은 다형성(polymorphism)을 활용하여 구현되었다.
예를들어 ArrayList 클래스와 LinkedList 클래스는 서로 호환된다.
ArrayList와 LinkedList의 public method가 동일하기 때문에, 이 public method 들을 호출하는 형태로 정렬을 한 번만 구현하면 된다. 그렇기 때문에 ArrayList, LinkedList 클래스에 대한 정렬(sort)을 따로 구현할 필요가 없고 하나만 구현해도 된다.
비유를 하자면, 스마트폰 충전 케이블이 서로 호환되기 때문에, 스마트폰 모델마다 충전 케이블을 따로 만들지 않아도 되는 것과 비슷하다.
즉 서로 호환되는 컬렉션 클래스들의 그룹을 대상으로 정렬(sorting), 탐색(searching) 등의 연산을 구현할 때, 클래스 각각에 대해서 따로 구현할 필요 없이, 그룹에 대해서 한 번만 구현하면 된다.
이렇게 구현된 메소드들을 collection framework의 algorithms 라고 부른다.
java.util.Collections 클래스에 알고리즘 메소드들이 구현되어 있다.
Collection Framework의 Interface들
◇ Collection Interface
대다수의 자바 컬렉션 클래스를 대표하는 interface 이다.
대다수의 자바 컬렉션 클래스들에 Collection interface의 메소드들이 구현되어 있다.
달리 표현하자면, 자바 컬렉션 클래스 대다수에 적용되는 공통 메소드가 Collection interface에 정의되어 있다.
◇ Set Interface
수학에서 집합(set)은 값이 같은 항목을 여러 개 포함할 수 없다.
이 특징을 구현한 컬렉션 클래스 그룹을 대표하는 것이 Set interface 이다.
◇ List Interface
List interface를 구현한 대표적인 클래스가 ArrayList 이다.
배열과 비슷한 방법으로 사용할 수 있는 컬렉션 클래스들을 대표하는 것이 List interface 이다.
배열처럼 인덱스(index) 위치에 값을 저장한다. 인덱스는 0부터 시작한다.
◇ Queue Interface
자료구조 시간에 배운 큐(queue)처럼 사용할 수 있는 컬렉션 클래스들을 대표하는 것이 Queue interface 이다.
Queue에 데이터를 넣고 꺼내는 방식은 FIFO(first-in, first-out) 이다.
◇ Deque Interface
자료구조 시간에 배운 큐(queue)는 데이터를 넣고 꺼내는 방향이 정해져 있어서, 한쪽에서만 넣을 수 있고, 다른쪽에서만 꺼낼 수 있다.
deque는 양방향 큐라고 생각하면 된다. 양쪽에서 넣거나 꺼낼 수 있다. 그래서 큐(queue)처럼 FIFO 방식으로 사용할 수도 있고, 스택(stack)처럼 LIFO 방식으로 사용할 수도 있다
◇ Map Interface
키(key)로 값(value)을 등록하거나 꺼내는 방식으로 사용하는 컬렉션 클래스들을 대표하는 interface 이다.
◇ SortedSet Interface, SortedMap Interface
SortedSet, SortedMap은 각각 Set, Map의 자식 인터페이스이다.
그래서 각각 Set, Map에 정의된 메소드들을 상속 받는다.
SortedSet, SortedMap은 데이터를 정렬된 순서로 보관한다.
데이터가 정렬된 순서이기 때문에 가능한 메소드들이 SortedSet, SortedMap 인터페이스에 포함되어 있다.
Collection Interface 메소드
java.util.Collection 인터페이스
자료 목록을 보관하는 용도의 클래스를 컬렉션 클래스라고 부른다.
Java 표준 라이브러리에 들어있는 대부분의 컬렉션 클래스들은 Collection interface를 implements 하였다.
Collection interface를 implements한 클래스는 Collection interface의 메소드를 전부 구현하였다.
boolean add(E e) 객체 e를 내부 목록에 추가한다. 추가 작업이 성공했으면 true를, 실패면 false를 리턴한다. |
boolean addAll(Collection<E> c) 목록 객체 c에 들어있는 항목들을 전부 내부 목록에 추가한다. 추가 작업이 성공했으면 true를, 실패면 false를 리턴한다. |
void clear() 내부 목록에 들어있는 항목 전체를 제거한다. 그 결과 내부 목록은 비어 있는 상태가 된다. |
boolean contains(Object o) 파라미터 o와 동일한 값이 내부 목록에 들어있다면 true를 리턴한다. 동일한 값이 있는지 찾을 때 equals 메소드를 호출해서 비교한다. |
boolean containsAll(Collection<E> c) 컬렉션 객체 c에 들어있는 항목들이 전부 this 객체의 내부 목록에 들어있는지 확인한다. 전부 들어있다면 true를 리턴한다. 동일한 값이 있는지 찾을 때 equals 메소드를 호출해서 비교한다. |
boolean equals(Object o) 객체 o와 this 객체의 equality를 비교한다. 즉 this 객체와 o 객체의 클래스가 같고, 목록 o에 들어있는 항목의 수가, this의 그것과 동일하고, 양쪽 목록에 들어있는 항목들 각각이 서로 동일한 경우에 true 를 리턴한다. 항목들 각각이 서로 동일한지 비교할 때 equals 메소드를 호출해서 비교한다. |
int hashCode() 내부 객체 목록까지 고려하여 hash code 값을 계산해서 리턴한다. |
boolean isEmpty() 목록이 비어 있으면 true 를 리턴한다. |
Iterator<E> iterator() 내부 목록에 들어있는 항목을 하나씩 탐색하기 위한 Iterator 객체를 생성하여 리턴한다. |
boolean remove(Object o) 파라미터 o와 동일한 값(equals)을 목록에서 찾아서 제거한다. 파라미터 값이 null 이면, null을 찾아서 제거한다. 제거에 성공했으면 true를, 제거 실패면 false를 리턴한다. 예를 들어 파라미터와 동일한 값이 목록에 없어서 제거할 것이 없는 경우에 false를 리턴한다. |
boolean removeAll(Collection c) 파라미터로 주어진 목록 객체 c에 들어있는 항목들을 this 객체에서 찾아서 전부 제거한다. 제거된 항목이 한 개 이상이면 true를 리턴한다. |
boolean retainAll(Collection c) 파라미터로 주어진 목록 객체 c에 들어있지 않은 항목들을 this 객체에서 찾아서 전부 제거한다. 그래서 c에 들어있는 항목들만 this 객체에 남아있게 된다. 제거된 항목이 한 개 이상이면 true를 리턴한다. |
int size() 내부 목록에 들어있는 항목의 수를 리턴한다. |
Object[] toArray() 목록 객체에 들어있는 항목들을 배열에 채워서 리턴한다. 리턴되는 배열의 타입은 Object[] 이다. |
E[] toArray(E[] a) 목록 객체에 들어있는 항목들을 배열에 채워서 리턴한다. 리턴되는 배열의 타입은 파라미터로 주어진 배열의 타입과 같다. |
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
Collection (Java Platform SE 8 )
Compares the specified object with this collection for equality. While the Collection interface adds no stipulations to the general contract for the Object.equals, programmers who implement the Collection interface "directly" (in other words, create a clas
docs.oracle.com
'Programming > Java' 카테고리의 다른 글
String 문자열 비교(==연산자와 equals 메소드) (0) | 2020.08.28 |
---|---|
우선순위 큐(PriorityQueue) (0) | 2020.08.21 |
Collection 예제 (0) | 2020.08.14 |
[0701] 아스키 코드 (0) | 2020.07.01 |
[0701] Java 배열 정렬 기능 (0) | 2020.07.01 |