본문 바로가기

Java/기본

[Java] 컬렉션프레임워크101 - 컬렉션프레임워크CollectionFramework 개념잡기

컬렉션 프레임워크(collection framework)란

자료구조(data structure)란 데이터의 모임이다. 각 데이터를 일정한 규칙에 따라 나열하여 개별 데이터를 처리할 때보다 처리가 용이하다. 자바에서 컬렉션 프레임워크는 여러 데이터를 효과적으로 처리할 수 있도록 표준화된 클래스들의 집합을 의미한다.

 

컬렉션(collection) 데이터의 저장
프레임워크(framework) 사용방법을 정해둔 라이브러리

 

--> 자바 컬렉션 프레임워크 : 자바를 사용하여 데이터 저장하고 처리하는 방법을 정리해둔 인터페이스 및 클래스 모음

Colletion 인터페이스

java.util 패키지에 있으며, java.lang 패키지의 Interface Iterable<T> 인터페이스의 Subinterface이다. 
Iterable<T> 인터페이스는 iterator()메서드 1개를 가지는데, iterator()메서드는 Iterator 인터페이스를 리턴하여 Iterator 클래스의 기능을 활용할 수 있는 메서드이다.

 

Iterator 인터페이스의 메서드

데이터의 각 요소에 반복적으로 접근하여 요소를 가져오는 기능을 제공하는 인터페이스이다. 메서드는 hasNext(), next(), remove() 3개밖에 없다. Iterator 를 이용하여 데이터를 처리하는 과정은 후반부에 다루도록 한다.

메서드 내용
boolean hasNext() iteration 의 다음 요소가 있는지 여부
E next() iteration 다음값을 반환
void remove() iterator로부터 반환된 값 삭제하기

 

colletion 인터페이스의 주요 Subinterface

위에서 설명했지만 java.util 패키지에 Collection 인터페이스와 Map 인터페이스가 있으며 그 아래 Subinterface 및 구현객체들이 존재한다. Map 인터페이스와 Collection 인터페이스의 경우 별도로 존재하는 것을 확인할 수 있다.

 

주요 인터페이스 설명

자바 컬렉션 프레임워크의 자주 사용되는 인터페이스는 아래와 같다. 참고로 아래 컬렉션은 인터페이스이기 때문에 객체를 생성할 수 없으며 구현객체를 사용하여 객체를 생성해야 한다. 물론 다형성(polymorphism)을 통해 인터페이스의 참조변수가 구현 클래스의 인스턴스를 참조하도록 설정하면 생성이 가능하다.

 

List list = new ArrayList();	//다형성을 이용한 생성코드 예시

 

자료구조 내용
List interface 순서가 있는(원소의 중복을 허용하는) 데이터 집합
Set interface 순서가 없는(원소의 중복될 수 없는) 데이터 집합
Map interface key와 value로 구성된 요소를 원소로 하는 데이터 집합. key는 중복될 수 없다.



 

Iterator 와 Enumeration

Iterator(반복자) 와 Enumeration(열거형) 은 컬렉션의 각 요소들에 순차적으로 접근하여 처리하는데 사용한다. (Set, Map의 경우 index가 없어서 모든 항목을 순서대로 가져올 수는 없다. 대신 순차적으로 빠짐없이 모든 요소를 가져올 수 있다)

 

Enumeration은 Vector 및 HashTable에서 사용할 수 있다. Iterator의 경우 Collection을 상속, 구현하는 모든 객체에서 사용할 수 있다. Enumeration을 대신하기 위해 도입된 것이 Iterator 이고, Iterator 가 효율성에도 앞선다고 보인다.

 

코드 예제

import java.util.Iterator;
import java.util.Vector;

public class Test01_vector {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();

        String[] strArr = {"김연아", "추신수", "박찬호", "김연경", "심권호"};
        
        //반복문으로 vector라는 컬렉션에 값을 삽입하기
        //Vector는 List를 구현한 객체이다
        for(int i=0; i<strArr.length; i++){
            String name = strArr[i];
            vector.add(name);
        }

        //Iterator(반복자)를 이용해 값 가져오기
        Iterator<String> iterator = vector.iterator();
        while (iterator.hasNext()){
            String str = iterator.next();
            iterator.remove();      //값을 꺼내고 나서 삭제하기
            System.out.println(str);
        }

        int size = vector.size();
        System.out.println(size);       //0
    }
}