-
[ch 11 컬렉션 프레임웍] List, Set, Map 핵심 인터페이스 살펴보기프로그래밍 언어/JAVA 2022. 8. 2. 13:53
컬렉션 프레임웍
컬렉션 프레임웍이란 '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다. 컬렉션(collection)은 다수의 데이터, 즉) 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다.
컬렉션 프레임웍은 컬렉션, 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공하기 때문에 프로그래머의 짐을 상당히 덜어 주고 있으며, 또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다.
라이브러리(그래픽, 통계 등)는 공통으로 사용될만한 유용한 기능을 모듈화하여 제공하는데 비해, 프레임웍은 단순히 기능뿌난 아니라 프로그래밍 방식을 정형화하여 프로그램의 개발 생산성을 높이고 유지보수를 용이하게 한다.
컬렉션 프레임웍의 핵심 인터페이스
컬렉션 프레임웍에서는 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식하고 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. 그리고 인터페이스 List와 Set의 공통된 부분을 다시 뽑아 새로운 인터페이스인 Collection을 추가로 정의하였다.
인터페이스 List와 Set을 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어, 공통된 부분을 다시 뽑아 Collection인터페이스를 정의할 수 있지만 Map인터페이스는 이들과 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 상속계층도에 포함되지 못한다.
인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
ex) 대기자 명단구현 클래스 : ArrayList, LinkedList, Stack, Vector 등 Set 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
ex) 양의 정수 집합, 소수의 집합구현 클래스 : HashSet, TreeSet 등 Map 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
ex) 우편번호, 지역번호구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등 Collection 인터페이스
List와 Set의 조상인 Collection 인터페이스에는 다음과 같은 메서드들이 정의되어 있다.
메서드 설 명 boolean add ( Object o )
boolean addAll(Collection c)지정된 객체 또는 Collection의 객체들을 Collection에 추가한다. void clear() Collection의 모든 객체를 삭제한다. boolean contains(Object o)
boolean containsAll(Collection c)지정된 객체 또는 Collection의 객체들이 Collecion에 포함되어 있는지 확인한다. 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에 변화가 있으면 ture 없으면 false를 반환 int size() Collection에 저장된 객체의 개수 반환 Collection인터페이스는 컬렉션 클래스에 저장된 데이터를 읽고, 추가하고 삭제하는 등 컬렉션을 다루는데 가장 기본적인 메서드들을 정의하고 있다. 위의 표에서 반환 타입이 boolean인 메서드들은 작업을 성공하거나 사실이면 true를 , 그렇지 않으면 false를 반환한다.
List 인터페이스
List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다.
List 인터페이스 정의된 메서드는 아래 표에 설명할 것이다. Collection인터페이스로부터 상속받은 것은 제외!
메서드 설 명 void add( int index, Object element)
boolean addAll(int index, Collection c)지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가한다. Object get(int index) 지정된 위치에 있는 객체를 반환한다. int indexOf(Object o) 지정된 객체의 위치(index)를 반환한다.
(List의 첫 번째 요소부터 순방향으로 찾는다.)int lastIndexOf(Object o) 지정된 객체의 위치(index)를 반환한다.
(List의 마지막 요소부터 역방향으로 찾는다.)Object remove(int index) 지정된 위치에 있는 객체를 삭제하고 삭제된 객체를 반환한다. Object set(int index, Object element) 지정된 위치에 객체를 저장한다. void sort(Comparator c) 지정된 비교자로 List를 정렬한다. List subList(int fromIndex, int toIndex) 지정된 범위(fromIndex부터 toIndex)에 있는 객체를 반환한다. Set 인터페이스
set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다.
Set 인터페이스는 모두 Collection 인터페이스로부터 상속받은 것들이다. 위에 참고!!
Map 인터페이스
Map 인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스들을 구현하는 데 사용된다. 키는 중복될 수 없지만 값을 중복을 허용한다. 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 된다.
메서드 설 명 void clear() Map의 모든 객체를 삭제한다. boolean containsKey(Object 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 key, Object value) Map에 value객체를 key객체에 연결(mapping)하여 저장한다. void putAll(Map t) 지정된 Map의 모든 key-value 쌍을 추가한다. Object remove(Object key) 지정한 key객체와 일치하는 key-value객체를 삭제한다. int size() Map에 저장된 key-value 쌍의 개수를 반환한다. Collection values() Map에 저장된 모든 value 객체를 반환한다. 반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch11 컬렉션 프레임웍] Stack과 Queue의 메서드 (add vs offer) (0) 2022.08.03 [ch11 컬렉션 프레임웍] ArrayList, LinkedList 메서드& 추가와 삭제 (0) 2022.08.02 [ch9] String 클래스의 유용한 생성자와 메서드 (0) 2022.08.02 [JAVA] 이클립스 디버깅 하는 법 알아보기 (0) 2022.07.29 [ch7 자바 객체] 내부 클래스(inner class)와 익명 클래스(anonymous class) (0) 2022.06.22