제네릭스(Generics)란?
클래스 내부에 사용할 데이터 타입을 외부에서 지정하는 기법
클래스를 정의할 때 데이터의 타입을 확정하지 않고 객체를 생성할 때 타입 지정
구현의 편의성과 자료형의 안정성을 보장하기 위해 사용
제네릭스 클래스 설계
타입 매개변수는 하나의 대문자를 사용한다. 주로 'T'를 사용
타입 매개변수가 클래스 또는 메소드의 선언 등에 사용될 수도 있다.
제네릭은 참조 데이터 타입에 대해서만 사용이 가능하다. 원시 타입은 사용 불가
제네릭스 특징
객체 생성시에 <>안에 매개변수 타입을 선언, 컬파일러에게 사용 타입을 전달
캐스팅이 필요 없고, 보다 안전한 코드를 작성 가능
메소드가 받아들일 수 있는 타입을 제한함으로써 에러검사, 타입검사 생략
java.util 패키지의 컬렉션 클래스들은 기본적으로 제네릭스를 지원
상속관계에 있는 클래스에서 제네릭스 사용하기
제네릭스의 제한
클래스 상속 계층 구조의 와일드카드
<? extends T>
: T 또는 T의 자손 타입을 의미컬렉션은 객체를 담을 수 있는 신축성 있는 주머니이다.
배열 | 컬렉션 | |
---|---|---|
장점 | 모든 데이터 저장 가능, 사용이 편리함 | 자동으로 크기를 조정, 명시적인 이름의 메소드 사용 |
단점 | 처음에 지정한 크기에서 공간의 크기를 변경할 수 없음 | 사용 방법이 다소 복잡함 |
원시타입을 객체로 만들기 위해서는 Wrapper Class를 사용한다.
기본 데이터 타입 | Wrapper Class 이름 |
---|---|
int | Integer |
long | Long |
double | Double |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
short | Short |
void | Void |
데이터 군을 저장하는 클래스들을 표준화한 설계
다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성
자료구조와 알고리즘의 기능을 제공한다.
컬렉션 프레임워크의 기본 골격
Collection<E>
: 인스턴스 단위의 데이터 저장 기능 제공Map<K, V>
: Key-Value 구조의 인스턴스 저장 기능 제공Collection 인터페이스를 구현하는 Generic 클래스들
Map<K, V> 인터페이스를 구현하는 컬렉션 클래스들
ArrayList란?
주요 메소드명 | 설명 |
---|---|
add(Object obj) | ArrayList에 객체를 하나 추가 |
get(int index) | index 번째에 있는 객체를 반환 |
remove(int index) | index 번째에 있는 객체를 삭제 |
set(int index, Object obj) | index 번째에 있는 객체를 obj로 변경 |
size() | ArrayList에 저장된 객체의 개수를 반환 |
clear() | ArrayList의 모든 객체를 삭제 |
ArrayList 생성
ArrayList<데이터타입> arr = new ArrayList<데이터타입>(); // 객체 생성
for (데이터타입 a : arr) {
System.out.println(a);
}
Hashmap<K, V>이란?
주요 메소드명 | 설명 |
---|---|
put(Object key, Object value) | HashMap에 value 객체를 하나 추가 |
get(Object key) | 키가 key 객체로 저장되어 있는 value 반환 |
remove(Object key) | 키가 key 객체로 저장되어 있는 객체 삭제 |
keySet() | key로만 구성되어 있는 컬렉션을 반환 |
size() | HashMap에 저장된 객체의 개수를 반환 |
clear() | HashMap의 모든 객체를 삭제 |
HashMap<K, V> 생성
HashMap<키_데이터타입, 값_데이터타입> map = new HashMap<키_데이터타입, 값_데이터타입>();
for (키_데이터타입 key : map.keySet()) {
System.out.println(map.get(key));
}