Jeunwork space
Java 제네릭(Generic) | 자바 컬렉션 프레임워크 본문
제네릭 사용하는 이유
- 컴파일 시 타입을 정확하게 체크 하여 에러방지.
- 제네릭 코드 사용해 타입을 국한하면 프로그램 성능을 향상 시킬 수 있다.
제네릭 사용법
- 제네릭 타입 : 타입을 인자(파라미터)로 가지는 클래스와 인터페이스
- 클래스나 인터페이스 이름 뒤에 < >부호가 붙고 사이에 타입인자 위치
- 타입인자는 주로 대문자 알파벳 한글자로 표현
- 제네릭 타입은 멀티 타입 파라미터 : 두 개 이상의 타입 파라미터 사용 가능하다.
와일드 카드
- 무슨 타입이든 들어갈 수 있다.
- 주의사항: 와일드 카드 타입에 배치시킬 객체는 생성자를 꼭 써줘야한다!!
- 와일드 카드로 배치된 제네릭 타입은 객체 내부에서 최상위 객체(Object)로 인식된다.
<?> : 모든 객체자료형에 대한 배치. 객체 내부의 모든 제네릭 타입은 Object로 인식
<?super 객체자료형> : 명시된 객체자료형 또는 객체자료형의 상위 객체들의 배치. 객체 내부의 모든 제네릭 타입은 Object로 인식
<?extends 객체자료형> : 명시된 객체자료형 또는 객체자료형으로부터 상속받는 하위 객체들의 배치. 객체 내부의 모든 제네릭 타입은 extends 다음에 명시된 객체자료형으로 인식한다.
자바 컬렉션 프레임워크
- 객체들을 한 곳에 모아 관리하고 그것을 편리하게 사용할 수 있도록 제공되는 환경. Container라고도 한다. 제네릭으로 되어있다.
- Collection : 검색, 조회, 정렬, 추가, 삭제(자료구조)와 같은 데이터를 관리할 수 있는 객체
- Framework : 특정 목적으로 사용하는 틀
- Interface
1. Collection Interface group : Set, List, Queue, Dequeue, SortedSet
2. Map Interface group : Map, SortedMap,
3. 기타 Interface group : Iterator, ListIterator, Concurrent
- class
1. Collection interface group의 클래스 : ArrayList, LinkedList, PriorityQueue, HashSet, TreeSet, ArrayDeque
2. Map Interface group의 클래스 : HashMap, TreeMap, LinkedHashMap
3. 기타 Interface group의 클래스 : Concurrent
Set Interface
- set내에 저장되는 객체들은 특별한 기준에 맞춰서 정렬되지 않는다.
- ex) HashSet, TreeSet 등
하여 에러방지.
HashSet 생성자
List Interface
- 시작과 끝이 정해진 상태로 정렬되어 있는 요소들을 차례대로 꺼내서 쓴다.
- 배열과 차이점 : 배열은 크기가 고정되어 있고, 컬렉션의 List 구조는 가변적 길이를 가진다.
- List 구현 클래스
1. Stack
LIFO(Last In First Out) 인덱스 값은 1부터 시작한다.
2. Vector
용량이 가변적으로 증가.
Queue Interface
- FiFO(First In First Out)
- LinkedList( ) 새로운 LinkedList 객체가 생성된다.
- LinkedList(Collection <?extends E>c) 전달된 컬렉션을 포함하는 LinkedList 객체가 생성된다.
Map Interface
- Key와 Value 매핑하는 객체
- Key 값은 절대 중복될 수 없으며 각 Key는 1개의 Value만 매핑할 수 있다.
- Hashtable
- HashMap
HashMap
- Key와 Value를 하나의 쌍으로 저장되는 구조.
- 저장되는 Value와 Key가 null을 허용한다.
- 중복은 허용하지 않으므로 null을 가지는 Key가 두 개일 수 없다.
- Hashtable에 비해 처리 속도가 빠르다.
'Java' 카테고리의 다른 글
Java Util 패키지 - Calendar 클래스 (0) | 2021.04.29 |
---|---|
Java generic 연습문제 (0) | 2021.04.28 |
단언(Assertion) (0) | 2021.04.19 |
패키지 - 클래스 만들기 예제 (0) | 2021.04.19 |
Java 패키지 선언, 사용방법, static imports문 (0) | 2021.04.15 |