본문 바로가기
DEV/Java

[자바] 컬렉션 프레임워크(Collections Framework)

by 어쩌다개발 2023. 2. 5.
반응형

컬렉션 프레임워크

데이터를 군을 저장하는 클래스들을 표준화 한 설계.

컬렉션은 다수의 데이터를 의미하고, 프레임워크는 표준화된 프로그래밍 방식을 의미한다.

인터페이스와 다형성을 이용한 객체지향적 설계로 표준화되어 있어서 사용법도 쉽고, 재상용성이 높은 코드를 작성할 수 있는 장점이 있다.

인터페이스 특징
List 순서가 있는 데이터의 집합. 데이터의 중복 허용.
Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음.
Map 키와값의 쌍으로 이루어진 데이터의 집합.
순서를 유지하지 않고, 키의 중복을 허용하지 않음. 값의 중복은 허용.

참고로 Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임워크가 만들어지기 이전부터 존재하던 것들이기 때문에 컬렉션 프레임워크의 명명법을 따르지 않는다.

JDK1.2 이전까지는 다수의 컬레터를 저장할 수 있는 클래스들을 서로 다른 각자의 방식으로 처리했어야 했다. 그러나 JDK 1.2부터 컬렉션 프레임워크가 등장하였고 다양한 종류의 컬렉션 클래스가 추가되면서 클래스를 표준화된 방식으로 다룰 수 있게 체계화하였다.

Vector나 Hashtable과 같은 기존 컬렉션 클래스들은 호환을 위해 설계를 변경해서 남겨두었지만, 되도록 사용하지 않고 새로 추가된 ArrayList와 HashMap을 사용하는 것이 좋다.

개인적으로 프로젝트 하면서 List와 Map은 많이 사용하였지만 Set은 사용한 적이 거의 없다.

공부를 시작하신 분이라면 Set 이런거구나 하고 가볍게 1회독 하셔도 될 듯 하고, List와 Map 두 개만 충분히 공부해놓으면 되지 않을까 싶다.

컬렉션 인터페이스에 정의 된  메서드

메서드 설명
boolean add(Object o)
boolean addAll(Collection c)
지정된 객체(o) 또는 Collection(c) 의 객체들을 Collection에 추가한다.
void clear() Collection의 모든 객체를 삭제한다.
boolean contains(Object o)
boolean containsAll(Collection c)
지정된 객체(o) 또는 Collection의 객체들이 Collection에 포함되어 있는지 확인한다.
boolean equals(Object o) 동일한 Collection인지 비교한다.
int hashCode() Collection의 hash code를 반환한다.
boolean isEmpty() Collection이 비어있는지 확인한다.
Iterator iterator() Collection의 Iterator를 얻어서 반환한다.
boolean remove(Object o) 지정된 객체를 삭제한다.
boolean removeAll(Collection c) 지정된 Collection에 포함된 객체들을 삭제한다.
boolean retainAll(Collection c) 지정된 Collection에 포함된 객체만을 남기고 다른 객체들은 Collection 에서 삭제한다. 이 작업으로 인해 Collection에 변화가 있으면 true를 그렇지 않으면 false를 반환한다.
int size() Collection에 저장된 객체의 개수를 반환한다.
Object[] toArray() Collection에 저장된 객체를 객체배열(Object[])로 반환한다.
Object[] toArray(Object[] a) 지정된 배열에 Collection의 객체를 저장해서 반환한다.

 

List인터페이스

List인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다.

메서드 설명
void add(int index, Object elemnet)
boolean addAll(int index, Collection c)
지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가한다.
Object get(int index) 지정된 위치(index)에 있는 객체를 반환한다.
int indexOf(Object o) 지정된 객체의 위치(index)를 반환한다.
(List의 첫 번째 요소부터 순방향으로 찾는다.)
int lastIndexOf(Object o) 지정된 객체의 위치(index)를 반환한다.
(List의 마지막 요소부터 역방향으로 찾는다.)
Listlterator listIterator()
ListIterator listIterator(int index)
List의 객체에 접근할 수 있는 ListIterator를 반환한다.
Object remove(int index) 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다.
Object set(int index, Object element) 지정된 위치(index)에 객체(element)를 지정한다.
void sort(Comparator c) 지정된 비교자(comparator)로 List를 정렬한다.
List subList(int fromIndex, int toIndex) 지정된 범위(fromIndex부터 toIndex)에 있는 객체를 반환한다.

 

Set 인터페이스

중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다.

 

Map 인터페이스

키(Key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용된다.

키는 중복될 수 없지만 값은 중복을 허용한다.

만약, 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 된다.
즉, 키가 같은 데이터를 추가하면 덮어씌어지는 개념으로 보면 된다.

메서드 설명
void clear() Map의 모든 객체를 삭제한다.
boolean containsKey(Obejct key) 지정된 key객체와 일치하는 Map의 Key 객체가 있는지 확인한다.
boolean containsValue(Object value) 지정된 value 객체와 일치하는 Map의 value 객체가 있는지 확인한다.
Set entrySet() Map에 저장되어 있는 key-value 쌍을 Map.Entry 타입의 객체로 저장한 Set으로 반환한다.
boolean equals(Object o) 동일한 Map인지 비교한다.
Object get(Object key) 지정한 key 에 대응하는 value객체를 찾아서 반환한다.
int hashCode() 해시코드를 반환한다.
boolean isEmpty() Map이 비어있는지 확인한다.
Set keySet() Map에 저장된 모든 key 객체를 반환한다.
Object put(Object eky, Object value) Map에 value객체를 key 객체에 연결하여 저장한다.
void putAll(Map t) 지정된 Map의 모든 key-value쌍을 추가한다.
Object remove(Object key) 지정한 key객체와 일치하는 key-value객체를 삭제한다.
int size() Map에 저장된 key-value 쌍의 개수를 반환한다.
Collection values() Map에 저장된 모든 value 객체를 반환한다.

Map 인터페이스에서 값(value)은 중복을 허용하기 때문에 Collection 타입으로 반환하고, 키(key)는 중복을 허용하지 않기 때문에 set타입을 반환한다.

Map.Entry 인터페이스

Map 인터페이스의 내부 인터페이스다. 내부 클래스와 같이 인터페이스도 인터페이스 안에 인터페이스를 정의하는 내부 인터페이스(innner interface)를 정의하는 것이 가능한다.

Map에 저장되는 key-value쌍을 이루기 위해 내부적으로 Entry 인터페이스를 정의해놓았다.

객체 지향적으로 설계하도록 유도하기 위한 것으로 Map 인터페이스를 구현하는 클래스에는 Map.Entry 인터페이스도 함께 구현해야 한다.

Map 인터페이스의 소스 코드 일부

public interface Map {
	public static interface Entry {
    	Object getkey();
        Object geteValue();
        Object setValue(Object value);
        boolean equals(Object o);
        int hashCode();
        ...
    }
}

 

메서드 설명
boolean equals(Object o) 동일한 Entry인지 비교한다.
Object getKey() Entry의 key 객체를 반환한다.
Object getValue() Entry의 value 객체를 반환한다.
int hashCode() Entry의 해시코드를 반환한다.
Ojbect setValue(Object value) Entry의 value 객체를 지정된 객체로 바꾼다.

 

 

참고: 자바의정석

반응형

'DEV > Java' 카테고리의 다른 글

[자바] LinkedList  (3) 2023.02.11
[자바]ArrayList  (6) 2023.02.06
[자바] java.time 패키지  (5) 2023.02.03
[자바] MessageFormat  (3) 2023.02.02
[자바] ChoiceFormat  (1) 2023.02.02

댓글