[Java] Generic And Collection
programming/java

[Java] Generic And Collection



14. 제네릭과 컬렉션


가. 일반화(Generic)


다양한 자료형의 데이터를 처리하기 위해서는 일반화(Generic) 작업이 필요함


나. 컬렉션(Collection)


1) 컬렉션이란?

가) 집합데이터(다수의 데이터, 데이터 그룹)을 의미함

나) 집합데이터를 저장할 수 있는 자료형

배열

컬렉션 클랙스(collection class)

ex. ArrayList, HashSet, HashMap


다) 컬렉션 클래스들은 배열의 단점을 보완하기 위해 만들어짐

라) 자료 구조들에 대한 알고리즘이 미리 구현되어 있음(Stack, LinkedList, Sort 등)


2) 자료형의 발전 과정

변수 : 1개의 자료만 저장

배열 : 여러 개의 자료 저장 가능(같은 자료형)

구조체 : 다양한 자료형을 저장(Java에는 없음)

클래스 : 다양한 자료형 + 함수(method)


3) 배열과 컬렉션

가) 배열의 장점

빠른 처리 속도

나) 배열의 단점

같은 자료형만 저장 가능(Object 배열 제외)

사이즈가 고정적

추가, 삭제가 어려움

다) 컬렉션의 장점

다양한 자료형 저장 가능

사이즈가 유동적

추가, 삭제가 쉬움

라) 컬렉션의 단점

배열에 비해 속도가 느리고 메모리 사용량이 늘어남


4) 비순차적인 자료의 추가, 삭제

(images)


다. 컬렉션의 종류


1) Set : 순서없음, 중복값을 허용하지 않음

2) List : 순서대로 저장, 인덱스로 조회, 중복값 허용

3) Map : key(변수명)로 조회, 순서없음, key는 중복될 수 없음


라. 스택(Stack)과 큐(Queue) 구조


1) 스택과 큐

가) 스택(Stack) : LIFO(마지막에 입력된 것이 가장 먼저 출력) 

method 호출, 수식 계산, undo/redo, 뒤로/앞으로(웹브라우저)

나) 큐(Queue) : FIFO 구조(제일 먼저 입력된 것이 제일 먼저 출력)

최근 사용문서, 인쇄작업대기목록, 버퍼(buffer)


마. List 구조(Vector, ArrayList, LinkedList)


1) Vector

동기화 지원으로 안전한 처리가 가능하지만 성능이 저하될 수 있음


2) ArrayList

Vector를 개량한 클래스

저장순서가 유지되고 중복값이 허용됨

내부적으로 배열을 사용하여 빠른 처리가 가능함

비순차적인 추가, 삭제 작업의 성능은 떨어짐


3) LinkedList

비순차적인 추가, 삭제 작업의 경우 ArrayList보다 성능이 좋음


images


4) LinkedList를 이용한 데이터의 추가

images


바. 리스트(List)의 사용 방법


1) List의 생성

List<자료형> 참조변수 = new ArrayList<자료형>();


2) 자료의 개수

참조변수.size()


3) 자료 추가

참조변수.add(값);

참조변수.add(인덱스, 값);


4) 자료 참조

참조변수.get(인덱스);

인덱스는 0부터 시작


5) 자료 삭제

참조변수.remove(인덱스);


사. 맵(HashMap)의 사용 방법


1) 해싱(hashing) 기법을 사용해서 데이터를 저장하기 때문에 많은 양의 데이터를 검색할 때 성능이 뛰어남


2) 데이터를 key와 value 구조로 저장

키(key) - 컬렉션 내의 키(key) 중에서 유일해야 한다.

값(value) - 키(key)와 달리 데이터의 중복을 허용한다.


3) 자료 추가
맵.put(key, value)

4) 자료 조회
맵.get(key)


아. Hash Table


1) 해쉬 테이블(Hash Table)

키(key)라는 특별한 인덱스로 자료에 접근하는 배열로 구성되는 자료구조


2) 해쉬 함수(Hash Function)

키값을 받아 그 키의 해쉬값(hash coding 또는 hash value)을 리턴하는 함수


3) 순차적인 접근은 허용하지 않음

images


자. 실습예제


1) Type1.java    10. 02;03;05

3) Type3.java    02;03;08

4) VectorExam.java    02;03;15

5) ListExam.java    02;12;59 / 11.
7) ListMember.java 11. 03;54

8) Student.java    25;35

9) ListStudent.java    25;41

11) ListBook.java    41;20

13) MapList.java    01;08;15

14) StackExam.java    01;20;37

15) LinkedExam.java    01;24;17

16) SetExam.java    01;35;42