Dreaming Dean
Hello, I'm Studying
  • Secure
  • Java
  • Oracle
  • +others
Coding.
I AM STUDYING PROGRAMING LANGUAGE. IF YOU WANT TO SEE MY WORK THE PROGRAMMING PROJECT, CHECK IT OUT MY BLOG AND GITHUB.

Collection Framework 컬렉션 프레임워크(1/2)

Dean92
2017. 6. 6. 16:37

컬렉션 프레임워크

컬렉션 프레임워크에서 컬렉션은 다수의 데이터, 데이터그룹을 뜻하고 프레임워크는 표준화된 프로그래밍 방식을 뜻한다. 즉 컬렉션 프레임 워크란 데이터 군을 저장하는 클래스들을 표준화 한 것이다.

컬렉션 프레임워크는 컬렉션들과 다수의 데이터를 사용하는 데 필요한 다양하고 유용한 클래스들을 제공한다.


컬렉션 프레임워크 구조

인터페이스 List와 Set을 구현한 컬렉션 클래스들의 공통부분을 뽑아 만든 것이 Collection인터페이스 이다. Map은 이들 컬렉션과 전혀 다른 형태 이므로 공통부분이 없다.

  • Collection 인터페이스를 구현하는 제네릭 클래스
  • - 인스턴스 단위의 데이터 저장 기능을 제공(배열과 같이 단순 인스턴스 참조 값 저장)
  • Map
  • - key-value 구조의 인스턴스 저장 기능 제공

    ▼ 컬렉션 프레임워크 인터페이스

    인터페이스 특징 사용 예 구현클래스
    List 순서가 있는 데이터의 집합. 데이터 중복 허용 대기자 명단 ArrayList, LinkedList, Stack, Vector 등
    Set 순서를 유지하지 않는 데이터 집합. 데이터 중복 허용않함 양의 정수집합, 소수 집합 HashSet, TreeSet 등
    Map 키Key와 값Value의 쌍으로 이루어진 데이터 집합, 순서는 유지되지 않고 키는 중복을 허용하지 않으며 값은 중복이 허용된다. 우편번호, 전화번호 HashMap, TreeMap, Hashtable, Properties



    컬렉션 인터페이스 메소드

    ▼ 컬렉션 인터페이스에 정의된 메소드들

    메소드 설명
    int size() 원소의 개수 반환
    boolean isEmpty() 공백 상태이면 true 반환
    boolean contains(Object obj) obj를 포함하고 있으면 true 반환
    boolean add(E element) 원소 추가
    boolean remove(Object Obj) 원소 삭제
    Iterator iterator() 원소 확인
    boolean addAll(Collection c) c에 있는 모든 원소 추가
    boolean containsAll(Collection c) c에 있는 모든 원소가 포함되어 있으면 true
    boolean removeAll(Collection c) c에있는 모든 원소 삭제
    void clear() 모든 원소 삭제
    Object[ ] toArray() 컬렉션을 배열로 변환
    T[ ] toArray(T[ ] a) 컬렉션을 배열로 변환


    Collection 인터페이스는 컬렉션 클래스에 저장된 데이터를 읽고 추가/삭제하는 등 컬렉션을 다루는데 기본적인 메소드들을 가지고 있다.


    List 인터페이스

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


    ▼ List 인터페이스에 정의된 메소드들

    메소드 설명
    void add(int index, Object element)
    boolean addAll(int index, Collection c)
    지정된 위치Index에 객체Element 또는 컬렉션에 포함된 객체들을 추가한다.
    Object get(int index) 지정된 위치Index에 있는 객체를 반환한다.
    ... 나머지는 api문서를 참고한다.


    Set 인터페이스

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


    Map 인터페이스

    Map 인터페이스는 키Key와 값Value을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용된다. 키는 중복을 허락하지 않고 값은 중복이 허용된다.


    ▼ Map 인터페이스에 정의된 메소드들

    메소드 설명
    void clear() Map의 모든객체를 삭제한다.
    boolean containsKey(Object Key) 지정된 Key와 일치하는 Map의 Key객체가 있는지 확인한다.
    boolean containsValue(Object Value) 지정된 Value와 일치하는 Map의 Value객체가 있는지 확인한다
    Object get(Object key) 지정한 key객체에 대응하는 value객체를 찾아서 반환한다.
    ... 나머지는 api문서를 참고한다.



    ArrayList

    ArrayList는 List인터페이스를 구현하여 데이터의 저장순서가 유지되고 중복을 허용하는 특징을 갖게 된다.

  • List 인터페이스를 구현하는 대표적인 제너릭 클래스
  • - ArrayList, LinkedList
  • List 인터페이스를 구현한 클래스의 인스턴스 저장 특징
  • - 동일한 인스턴스의 중복 저장을 허용한다.
    - 인스턴스의 저장 순서가 유지된다.
    
    import java.util.ArrayList;
    
    public class ArrayListTest {
    
    	public static void main(String[] args) {
    		ArrayList<Integer> list = new ArrayList<Integer>();
    		
    		// 데이터 저장
    		list.add(new Integer(11));
    		list.add(new Integer(22));
    		list.add(new Integer(33));
    		
    		// 데이터 참조
    		System.out.println("1차 데이터 참조");
    		for(int i=0; i<list.size(); i++) {
    			// 0이 첫번 째
    			System.out.println(list.get(i));
    		}
    		
    		// 데이터 삭제
    		list.remove(0);		// 0이 전달되었으므로 첫번 째 데이터 삭제
    		System.out.println("2차 데이터 참조");
    		for(int i=0; i<list.size(); i++) {
    			System.out.println(list.get(i));
    		}
    	}
    
    }
    



    LinkedList

    크기를 변경할 수 없고 비순차적인 데이터의 추가 또는 삭제에 걸리는 시간이 오래걸리는 단점을 가진 배열을 보완하기 위해 만들어진 자료구조가 LinkedList이다. LinkedList는 자료구조가 불연속적으로 존재하는 데이터를 서로 연결Link한 형태로 아래 그림과 같이 존재한다.

  • 데이터의 저장방식
  • - ‘리스트’라는 자료구조를 기반으로 데이터를 저장한다.
  • 사용방법
  • - ArrayList와 사용방법이 비슷하지만 데이터를 저장하는 방식에서 큰 차이가 난다.
    - 대부분의 경우 ArrayList를 대체해서 사용할 수 있다.
    
    import java.util.LinkedList;
    
    public class ArrayListTest {
    
    	public static void main(String[] args) {
    		LinkedList<Integer> list = new LinkedList<Integer>();
    		
    		// 데이터 저장
    		list.add(new Integer(11));
    		list.add(new Integer(22));
    		list.add(new Integer(33));
    		
    		// 데이터 참조
    		System.out.println("1차 데이터 참조");
    		for(int i=0; i<list.size(); i++) {
    			// 0이 첫번 째
    			System.out.println(list.get(i));
    		}
    		
    		// 데이터 삭제
    		list.remove(0);		// 0이 전달되었으므로 첫번 째 데이터 삭제
    		System.out.println("2차 데이터 참조");
    		for(int i=0; i<list.size(); i++) {
    			System.out.println(list.get(i));
    		}
    	}
    
    }



    ArrayList Vs. LinkedList

    장점 단점
    ArrayList 데이터의 참조가 용이해서 빠른 참조가 가능하다. 저장소의 용량을 늘리는 과정에서 많은 시간이 소요된다.
    데이터의 삭제에 필요한 연산과정이 매우 길다.
    LinkedList 저장소의 용량을 늘리는 과정이 간단하다.
    데이터의 삭제가 매우 간단하다.
    데이터의 참조가 비교적 불편하다.

    Comments