본문 바로가기

BE/JAVA

[JAVA] 자바 컬렉션 프레임워크(List/Set/Map) 이해

목차
1. 컬렉션 프레임워크(Collection Framework)
2. List 인터페이스(List Inteface)
3. Set 인터페이스(Set Inteface)
4. Map 인터페이스(Map Interface)

 

📌 1. 컬렉션 프레임워크(Collection Framework)  

Collection Framework 란 무엇일까요? 말 그대로 컬렉션(Collection) 과 프레임워크(Framework)를 합한 말입니다. 

첫번째로, 컬렉션(Collection) 의 사전적 의미는 '한 공간에 여러가지 물건을 모아 넣은 것'을 의미합니다. JAVA에서도 사전적 의미와 비슷하게 비슷한 데이터들을 한 공간에 모아 넣은 것을 의미합니다. 

두번째로, 프레임워크(Framework)의 사전적 의미는 '어떤 목적을 이루기 위한 기본 구조 및 틀(뼈대)', '어떠한 문제를 해결하기 위해 협력하여 사용되는 클래스 및 인터페이스의 집합' 를 의미합니다. 

 

자바는 Collection Framework 를 통해 여러 가지 자료구조 인터페이스를 지원합니다 .

위의 컬렉션(Collection) 과 프레임워크(Framework)의 의미를 JAVA의 관점에서 합쳐보면,

한 공간에 여러 데이터 저장  + 데이터를 처리하는 클래스의 집합 두 가지의 의미가 합쳐질 것입니다. 

 

컬렉션 프레임워크란?
일정 타입 데이터들을 처리하기 위해 정의되어있는 표준화된 클래스 및 인터페이스의 집합입니다.

 

Collection 공통 주요 메서드 

메서드 명 메서드 설명 
boolean add(Object e) 객체(e) 를 컬렉션에 추가 
boolean contains(Object e) 컬렉션 내 객체(e)가 포함되어 있는지 확인  
void clear()  리스트의 모든 객체 삭제 
boolean isEmpty() 리스트가 비어있는지 확인 
int size()
리스트의 크기 확인 
boolean remove(Object e)
지정된 객체 삭제 

 


 

📌 2. List 인터페이스 (순서 O, 중복 O) 

자료구조를 공부하면서 "리스트"라는 개념을 보셨을 것입니다. 

List 인터페이스는 이러한 "리스트" 자료구조에 맞게 설계된 인터페이스이며, 컬렉션(Collection) 프레임워크를 상속받는 자료구조 중 하나입니다. 선형 자료구조를 가지고 있어  데이터가 연속적/순차적으로(ordered) 저장됩니다. 연속적으로 객체를 저장하기 때문에 배열과 마찬가지로 "인덱스"를 통해 객체를 추가/수정/삭제/검색 가능합니다. 또한 중복을 허용하기 때문에, 같은 값을 저장할 수 있습니다. 

List<String> list = new ArrayList<>();
List<String> list = new LinkedList<>();

 

특징

  • 선형적
  • 순차적
  • 중복 허용
  • 인덱스로 접근 가능 

 

⚡ 하위 클래스

List 인터페이스를 상속받는 하위 클래스에는 ArrayList, LinkedList, Vector, Stack 클래스 등이 있습니다.

  • ArrayList 
  • LinkedList
  • Vector
  • Stack

 

 구현 예시

아래는 List 을 활용해 데이터를 삽입/검색한 예제입니다. 

  • add(V) :  해당 데이터(Value) 삽입
  • get(i) : 지정된 인덱스(i)에 해당하는 데이터 반환 
  • contains(V) : 해당 데이터가 있는 지 확인 
  • remove(i), remove(V)  : 지정된 키 혹은 데이터에 해당하는 데이터  제거 
  • size()  : 리스트 크기 반환 
List<String> list = new ArrayList<>();
list.add("이젤리");
list.add("신코딩");
System.out.println(list.get(0)); //이젤리
System.out.println(list.contains("이젤리")); //true
System.out.println(list.remove(0)); //이젤리
System.out.println(list.remove("신코딩")); //true
System.out.println(list.size()); //0

 


 

📌 3. Set 인터페이스 (순서X, 중복X) 

List 인터페이스 외에 Set,Map 인터페이스가 있는데요. 이번엔 Set 인터페이스에 대해 알아보겠습니다.

Set 인터페이스는 설날때 용돈을 받는 복주머니에 순서 없이 용돈을 넣는 형태와 같다고 생각하시면 됩니다. 

순서가 없기 때문에 인덱스로 접근이 불가하며 객체에 접근하기 위해서는 iterator 을 사용해야 합니다.

복주머니 안의 용돈들이 모두 다 다른 돈으로 중복되지 않은 것처럼, Set은 객체를 중복해서 저장할 수 없습니다.

HashSet<String> hashSet = new HashSet<>();

 

특징 

  • 비순차적
  • 중복을 허용하지 않음 

 

⚡ 하위 클래스

Set 인터페이스를 상속받는 하위 클래스에는 HashSet, TreeSet 클래스 등이 있습니다. 

TreeSet의 경우 이진 트리 방식으로 저장되어 데이터가 정렬되어 저장됩니다. 

  • HashSet
  • TreeSet
  • LinkedHashSet

 

 구현 예시

아래는 HashSet을 활용해 데이터를 삽입/삭제 한 예제입니다. 

  • add(V) :  Set에 데이터 삽입 
  • contains(V) : 해당 데이터가 있는 지 확인 
  • remove(V)  : 지정된 데이터 제거  
  • size()  : Set 크기 반환 
HashSet<String> hashSet = new HashSet<>();
hashSet.add("이젤리");
hashSet.add("신코딩");
for (String name : hashSet) {
   System.out.println(name); //신코딩 이젤리
}
System.out.println(hashSet.contains("이젤리")); //true
System.out.println(hashSet.remove("이젤리")); //true
System.out.println(hashSet.size()); //1

 


 

📌 4. Map 인터페이스  (순서X, 중복 키 X / 중복 데이터 O) 

마지막으로 Map인터페이스에 대해 알아보겠습니다.

Map은 컬렉션프레임워크에서 <키(Key),값(Value)> 형식을 가지고 있는 인터페이스입니다.  

Map의 대표적인 예시로는 전화번호부가 있는데요. 전화번호부 <이름, 번호> 가 각각 <키, 값>을 의미합니다. 

HashMap<String , String> map = new HashMap<String , String>();

 

⚡ 특징 

  • 비순차적
  • 키 값은 중복을 허용하지 않음 
  • 데이터는 중복을 허용  

 

⚡ 하위 클래스

Map 인터페이스를 상속받는 하위 클래스에는 HashMap, HashTable, TreeMap, LinkedHashMap 클래스 등이 있습니다. 

  • HashMap
  • HashTable
  • TreeMap
  • LinkedHashMap

 

구현 예시

아래는 HashMap을 활용해 데이터를 삽입/검색한 예제입니다. 

  • put(K,V) :  키와 데이터 삽입 
  • get(K) : 해당 키의 데이터 반환 
  • containsKey(K) : 해당 키가 있는 지 확인 
  • remove(K)  : 지정된 키에 해당하는 데이터 제거  
  • size  : 맵 크기 반환 
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("이젤리", "010-1111-1111");
hashMap.put("신코딩", "010-2222-2222");

System.out.println(hashMap.get("신코딩"));//010-2222-2222
System.out.println(hashMap.containsKey("이젤리")); //true
System.out.println(hashMap.remove("이젤리")); //010-1111-1111
System.out.println(hashMap.size()); //1