본문 바로가기

IT공부/JAVA

컬렉션 프레임워크(사용빈도 최상)

목차
 자료구조
 자료구조 클래스들
 컬렉션 프레임워크
 Collection과 Map

 

 

 

자료구조
 자료구조
- 데이터를 효율적으로 사용할 수 있도록 만들어진 구조.
- 데이터 추가, 삭제, 검색의 효율성을 제공
 자료구조 종류
- 리스트(List) : 데이터를 1차원으로 늘어놓은 형태의 자료구조.

- 배열리스트 : 데이터가 연속적으로 저장되므 검색에 용이하지만 삭제/삽입에는 용이하지 못하다.

- 연결리스트 : 데이터가 연속적이진 않지만 서로간에 연결되어있어 삭제/삽입에 용이하나 검색에는 용이하지 못하다.
- 스택(Stack) : 마지막에 넣은 데이터부터 순서대로 꺼낼 수 있는 자료구조.(LastInput/FirstOut:LIFO)(설거지때 쌓는 그릇과 쌓여진 최상단의 그릇먼저 사용되는 예.)
- 큐(Queue) : 입력된 순서대로 데이터를 꺼낼 수 있는 자료구조.(FirstInput/FirstOut:FIFO)(프린트의 뽑히는 순서, 또는 줄서기 같은 예.)
- 해쉬테이블(Hash table) : 키(key)를 이용해서 데이터를 검색하는 자료구조.

(키는 DB에서 프라이머리키와 같은 의미, 객체가 유일하냐 아니냐는 Hashcode로 객체를 구분하지만 키만다르다면 중복도 허용.)
- 집합(Set) : 키(key)를 이용해서 데이터를 검색하는 구조이긴 하나 데이터를 중복 저장하지 않는 자료구조.(순서 개념이 없기때문에 데이터의 중복을 허용하지 않음.)

 

 

 

 

 

컬렉션 프레임워크
 컬렉션 프레임워크
- 다수의 데이터를 쉽게 처리할 수 있는 표준화된 방법을 제공하는 클래스들의 집합.
- 배열의 단점(배열은 크기를 동적으로 늘릴 수 없음)을 보완한 배열의 발전된 모델.
- 데이터 군을 저장하는 클래스들을 표준화한 설계이다.
- 컬렉션(Collection)과 맵(Map) 계열의 클래스

 

 배열과 컬렉션이나 맵계열의 클래스와의 차이점
- 배열은 크기를 동적으로 늘릴 수 없지만 컬렉션이나 맵 계열의 클래스는 동적으로 메모리를 확장할 수 있다.

 

 Collection류와 Map류의 클래스

- 자료구조적인 기능의 클래스

 

 Collection과 Map 인터페이스(기능만 선언 즉 메서드만 선언)
- Collection과 Map은 인터페이스이기 때문에 메서드의 프로토타입만 존재한다.
- Collection을 구현해서 사용하면 집합적인 저장공간으로서의 기능을 구현한 클래스가 된다.
- Map을 구현해서 사용하면 검색적인 저장공간으로서의 기능을 구현한 클래스가 된다.

 

 

 

Collection과 Map의 상속구조

- List, Set : 인터페이스

- 키와 밸류의 값으로 저장 : Properties는 Hashtabel의 자식이므로 Map의 손자격이다.

- Vector(신버전) 앱개발에 주로 사용. ArrayList(구버전)가 더 자주 사용.

 

 

Collection과 Map
 컬렉션 클래스들의 특징

 

 

Collection 인터페이스
 List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에 정의하고, 두 인터페이스는 그것을 상속받는다.
 컬렉션을 다루는데 가장 기본적인 동작들을 정의하고 그 메서드를 제공한다.
 이것을 구현한 클래스들은 모두 집합적인 저장공간으로서의 기능을 가진다.

 

List 컬렉션
 List 컬렉션은 객체를 일렬로 늘어놓은 구조를 가진다.
 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다.
 ArrayList, Vector, LinkedList 등이 있다.

 

Set 컬렉션
 List 컬렉션은 저장 순서를 유지하지만, Set 컬렉션은 저장 순서가 유지되지 않는다.
 객체를 중복 저장할 수 없다. (수학의 집합과 유사)
 HashSet, LinkedHashSet, TreeSet 등이 있다.

 

 

Map 컬렉션
 Collection과 달리 Map은 검색적인 개념을 담고 있는 인터페이스.
 Map은 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조를 가진다.
 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다.

 

 

 

HashMap 클래스(동기화보장하지않음)
 HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.
 HashMap의 키로 사용할 객체는 hashCode()와 equals() 메서드를 재정의해서 동등 객체가 될 조건을 정해야 한다.
 Map<K, V> map = new HashMap<K, V>();

 

 

Hashtable 클래스(동기화보장)
- Hashtable 은 HashMap과 동일한 내부 구조를 가지고 있다.
- Hashtable의 키로 사용할 객체는 hashCode()와 equals() 메서드를 재정의해서 동등 객체가 될 조건을 정해야 한다.
- HashMap과의 차이점은 Hashtable은 동기화된(synchronized) 메서드로 구성되어 있어 멀티 스레드가 동시에 이 메서드를 실행할 수 없다.(thread safe)
- Map<K, V> map = new Hashtable<K, V>();

 

Vector와 ArrayList의 비교
 Vector와 ArrayList의 공통점
- 순서가 있는 Collection이다.
- List 인터페이스를 구현하고 있다.
- 데이터를 중복해서 포함할 수 있다.

 

 Vector와 ArrayList의 차이점
- Vector는 자동으로 동기화를 보장해준다.
- ArrayList는 동기화를 보장해주지 않는다.

 

 ArrayList의 동기화 지원 방법
-List list = Collections.synchronizedList(new ArrayList(...));

 

 Vector와 ArrayList의 기능
- ArrayList는 배열에 동적 메모리 증가 기능을 구현한 클래스이다.
- Vector는 ArrayList에 동기화가 보장되도록 최적화한 클래스이다.

 

 

 

Hashtable, HashMap의 비교
 Hashtable, HashMap의 공통점
- 내부적으로 모두 Hash 기법을 이용한다.
- Map 인터페이스를 구현하고 있다.
- 키(Key)와 값(Value)을 이용해서 데이터를 관리한다.

 Hashtable과 HashMap
-Hashtable은 동기화가 보장 되지만 HashMap은 동기화가 보장되지 않는다.

 

 HashMap의 동기화 지원 방법
- Map m = Collections.synchronizedMap(new HashMap(...));

 

 Hashtable, HashMap과 HashSet과의 관계
- Hashtable과 HashMap은 둘다 Map 인터페이스를 구현하고 있다.
- HashSet은 내부적으로 Hash기법을 사용하지만 Set 인터페이스를 구현하고 있다.

 

ArrayList와 HashSet의 비교


 ArrayList와 HashSet의 공통점
- 객체의 저장공간이다.
- 동기화를 보장하지 않는다.


ArrayList와 HashSet의 차이점
 ArrayList
- List 인터페이스를 구현하는 클래스이다.
- 순서의 개념이 있다.
- 데이터의 중복을 허용한다.


 HashSet
- Set 인터페이스를 구현하는 클래스이다.
- 순서의 개념이 아니라 집합의 개념이 있다.
- 데이터의 중복을 허용하지 않는다.


 ArrayList와 HashSet의 기능
- 순서가 중요한 의미를 가진다면 ArrayList를, 순서는 중요하지 않고 데이터가 중복되지 않기를 원한다면 HashSet을 이용하면 된다.

 

 

Properties 클래스
 Properties 클래스
- Properties클래스는 말 그대로 속성들을 모아서 하나의 객체로 만들기 위해 제공되는 클래스이다
- Properties는 키와 값을 String 타입으로 제한한 컬렉션이다.
- 어플리케이션의 옵션 정보, 데이터베이스 연결 정보, 국제화(다국어) 정보 등을 저장한 *.properties 파일을 읽을 때 주로 사용한다.

 

 Properties 클래스의 필요성
- 일반적으로 사용하는 각자의 컴퓨터도 마찬가지이며 그 안에서 구동 되는 모든 프로그램들도 각각의 속성들을 가지고 있다.
- 컴퓨터가 켜질 때 또는 프로그램이 시작되기 전에 여러 개의 속성들 중 원하는 속성들을 미리 인식되게 하여 전반적인 실행 환경을 조율하고 보다 신속한 처리속도를 가져오는데 목적을 두고 있다.

 

 Properties 클래스의 주요 메서드

 

 

'IT공부 > JAVA' 카테고리의 다른 글

멀티쓰레드  (0) 2019.05.21
중첩 클래스  (0) 2019.05.20
기본 API  (0) 2019.05.13
예외 처리  (0) 2019.05.10
패키지와 접근제어  (0) 2019.05.09