컬렉션 프레임워크(Collections Framework)

최준호·2021년 8월 16일
0

java

목록 보기
14/25

컬렉션 프레임워크란

컬렉션 프레임워크란 데이터들을 저장하는 클래스들을 표준화한 설계를 의미한다. 우리가 흔히 사용하는 List와 Set, Map 등은 JDK1.2 이후로 등장하여 사용하고 있다. 인터페이스 List와 Set은 서로 많은 공통부분이 있어서 공통된 부분을 다시 Collection 인터페이스로 정의할 수 있었다. Map은 이들과 전혀 다른 현태이기 때문에 포함되지 못했지만 이러한 설계는 객체지향언어의 장점을 보여주는 예시이다. 후에 프로그래밍 실력이 늘었다면 컬렉션 플레임웍의 실제 소스를 분석해보면 객체지향적인 설계능력을 향상시키는데 도움이 많이 될것이다.

인터페이스들의 종류

List 순서가 있는 데이터 집합. 중복을 허용
ArrayList, LinkedList, Stack, Vector

Set 순서를 유지하지 않는 데이터 집합. 중복을 허용하지 않는다.
HashSet, TreeSet

Map key와 value로 이루어진 데이터의 집합, 순서는 유지되지 않으며 key는 중복을 허용하지 않고 value는 중복을 허용한다.
HashMap, TreeMap, Hashtable, Properties

이 외에 Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임웍이 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임웍의 명명법을 따르지 않는다. Vector나 Hashtable은 대체되어지는 프레임웍이 있기 때문에 사용하지 않는 것이다 좋다. 대체되는 프레임웍으로는 ArrayList와 HashMap이다.

Collection의 Method

boolean add(Object o) boolean addAll(Collection c)
지정된 객체 또는 Collection 객체들을 Collection에 추가한다.

void clear
Collection의 객체들을 모두 삭제

boolean contains(Object o) boolean containsAll(Collection c)
Collection에 포함되어 있는지 true, false로 반환

boolean equals(Object o)
동일한 Collection인지 비교

int hashcode()
Collection의 hash code 반환

boolean isEmpty
비어있는지 확인

Iterator iterator()
Iterator 객체 반환

boolean remove(Obejct o)
지정된 객체를 삭제

boolean removeAll(Collection c)
지정된 Collection에 포함된 객체들을 삭제

boolean retainAll(Collection c)
지정된 Collection에 포함된 객체만 남기고 다른 객체들은 삭제한다. 삭제에 성공하면 true, 삭제한 것이 없으면 false

int size()
Collection의 크기 반환

Object[] toArray()
Collection에 저장된 객체를 객체배열(=Object[])로 반환한다.

Object[] toArray(Object[] a)
지정된 배열에 Collection 객체를 저장해서 반환한다.

람다와 스트림에 관련된 메서드들이 더 있는데 아직 학습하지 않았으므로 람다와 스트림을 학습할 때 공부해보자. 또한 Java api를 보면 위 메서드들에 대한 설명에 Object 대신 E,K,V,T 등으로 표시되어 있는데 이는 제너릭으로 아직 학습하지 않았고 제너릭은 Object로 이해해도 무방하다.

Collection을 상속받은 인터페이스

List 인터페이스

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

Set 인터페이스
중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용

Map 인터페이스
Map은 key와 value 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스

  • Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스인데 Map에 저장되는 Key-Value를 다루기 위해 내부적으로 Entry 인터페이스를 정의해 사용할 수 있다.
profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글