본문 바로가기

04번. IT 힌트얻기/▶ 자바

[Java] 저장소 관련(배열, Collection, Map)


1. 기본 데이터 타입은 변수를 선언할 때 메모리가 생성된다.


2. 자바 언어 스펙 (Java Language Specification)을 보면 배열을 객체(Object)로 보고 있다.

그렇기 때문에 배열도 Object 클래스의 메서드를 모두 이용할 수 있다. 배열은 좀 특수한 경우의 객체라고 보면 된다.

모든 것을 종합해 볼 때 배열의 이름은 참조값 즉 참조 변수가 되는 것이다.


3. 제너릭(Generic)이란 클래스에 사용할 타입을 클래스를 디자인할 때 지정하는 것이 아니라 클래스를 사용할 때 지정한 후 사용하는 기술을 말한다.

<ex>

/**

컬렉션의 제너릭의 사용 여부

**/

import java.util.*;

public class CollectionGenericMain{

public static void main(String[] args){

//1.이전 버전의 자바

Vector v1 = new Vector();

v1.add(new String("Hello World"));

String str1 = (String)v1.elementAt(0);  //Casting을 하고 있다.

System.out.println(str1);

//2. 자바5.0 이상

Vector<String> v2 = new Vector<String>(); // <String> 형을 지정해 준다.

v2.add(new String("Hello World"));

String str2 = v2.elementAt(0); //Casting을 할 필요가 없다.

System.out.println(str2);

}

}


4. 동적으로 필요할 때 메모리를 확장할 수 있는 클래스가 컬렉션과 맵 계열의 클래스이다.

데이터를 집어넣으면 알아서 메모리가 커지고, 삭제하면 알아서 작아지는 데이터의 보관법은 당연히 더 매력적이다.


5. 일반적으로 Collection 인터페이스는 집합적인 데이터를 관리하기 위해 사용

   Map 인터페이스는 검색적인 저장공간을 지원하기 위해서 사용하는 경우가 많다.

   

6. Collection과 Map 유형의 특징은 앞에서도 언급했지만 객체의 삽입, 삭제, 수정, 검색의 기능을 가지고 있다. 그리고 Collection과 Map 유형들은 각각의 클래스마다 구현되는 알고리즘이 

다를 뿐 같은 부류들이다. 구현되는 알고리즘이란 LinkedList, Hash, Stack 등과 같은 자료구조 알고리즘을 의미한다. 이러한 차이점만 있을 뿐이지 별다른 사용상의 차이점은 없다


7. 배열의 경우 배열은 첨자의 개수만큼 변수를 생성하고 이를 위반했을 경우 ArrayIndexOutOfBoundsException을 발생시킴


8. 배열은 기본 데이터 타입의 데이터와 객체를 그 대상으로 하지만, Collection과 Map 유형은 오직 객체만을 대상으로 한다.


9. 자바에서 기본적인 자료구조를 제공하기 위한 환경을 자바 컬렉션 프레임웍 (Java Collection Framework)이라고 한다. 

Collection과 Map 인터페이스가 바로 자바 컬렉션 프레임웍의 기본이 되는 인터페이스이다.


10. Collection(순서나 집합적인 저장공간)   

      # List(순서가 있는 저장 공간)  : 데이터의 중복성을 허락한다

- LinkedList

- Stack

- Vector(동기화 보장)

- ArrayList (동기화 보장하지 않음)

  # Set(집합적인 저장 공간) : 수학의 집합 개념에 가깝다. 데이터를 중복해서 포함할 수 없다

- HashSet (Set 계열의 대표클래스)

- SortedSet(정렬을 위한 Set 계열의 클래스) -- TreeSet

Map (키와 값으로 데이터 핸들) : 검색의 개념이 가미된 인터페이스이다.

# HashTable(동기화 보장하는 Map계열의 클래스)

# HashMap (동기화 보장하지 않는 Map 계열의 클래스)

# SortedMap (정렬을 위한 Map 계열의 클래스) --- TreeMap


11. Collection은 객체의 저장소 역할을 하기 위한 많은 추상 메서드를 포함하고 있다. 

Collection 인터페이스의 추상 메서드 중 데이터를 삽입하는 메서드와 제거하는 메서드는 다음과 같다.


<삽입, 제거>

boolean add(E o);

boolean remove(Object o);


<데이터 유무, 개수 확인>

boolean isEmpty(); 비어있는지 확인하는 메서드

boolean contains(Object o); 특정 객체가 포함되어 있는지 확인하는 메서드

int size(); 포함된 객체의 수를 리턴하는 메서드


<모든 요소들을 배열형태로 리턴>

T[] toArray();


12. Map 인터페이스는 Collection과 달리 검색적인 개념을 담고 있는 인터페이스이다.


<삽입, 제거, 확인>

V put(K key, V value);  데이터를 삽입하는 메서드

V remove (Object key);  키(Key)를 이용해서 데이터를 제거하는 메서드

V get(Object key);      키(Key)를 이용해서 데이터를 검색하는 메서드


<데이터 확인>

boolean isEmpty(); 비어있는지 확인하는 메서드

boolean containKey(Object key); 특정 키가 있는지 확인하는 메서드

boolean containValue(Object Value); 특정 데이터가 잇는지 확인하는 메서드

int size(); 포함된 객체가 몇 개인지 확인하는 메서드


13. Collection이나 Map은 객체의 저장공간을 위한 기능적인 측면을 담당한다는 것은 동일하다.

하지만 Collection은 단순 집합적인 개념의 저장소의 기능을 가지고 있으며 Map은 키를 이용한 검색적인 저장소의 기능을 가지고 있다는 것이 다르다


특별한 기능은 없다. 데이터를 삽입하고 필요할 때 끄집어 낼 수 있으면 그것으로 끝이다. 

키 없이 단순히 데이터만을 넣어 두고자 할 때는 Collection 계열을 사용하면 된다. 키를 사용해서 데이터를 빠르게 검색하기 위해서는 Map 계열을 사용하면 된다.


Collection 인터페이스를 구현하였다면 객체를 저장하고, 저장된 객체를 핸들하는 작업을 하게 되는 것이다.

Collection 을구현하는 클래스 중에 가장 대표적인 클래스가 바로 Vector이다.

Map의 대표적인 클래스는 Hashtable이다. 개념상의 약간 차이가 있긴 하지만 객체의 저장소 역할을 하는 것은 Collection 유형과 동일하다. 

단지 키를 이용한다는 측면에서 Map이라 부르는 것이다.



▶ Example : List -ArrayList 



▶ Example : Map - HashMap


▶ Example : Set - HashSet