#명품 자바 프로그래밍 7장 제네릭
#모든 코드와 사진은 <명품 자바 프로그래밍>
1. 컬렉션 (collection) : 요소 객체들의 저장소- 먼가 파이썬의 리스트와 비슷한 것 같다
1) 제네릭(generics) 기법으로 구현(여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화시키는 기법)
2) 컬렉션 요소는 객체만 가능
3) 고정 크기의 배열을 다루는 어려움 해소
tmil. 제네릭 <E>- element, <T>- type, <K>- key, <V>- value
2. Vector<E>
1) 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스
2) Vector에 삽입 가능한 것- 객체, NULL
- 기본 타입(ex: int)은 Wrapper 객체(ex: integer)로 만들어 저장
- 주 메소드
add | 요소 추가 |
addAll | 컬렉션의 모든 요소를 벡터의 맨 뒤에 추가 |
get | 인덱스 요소 리턴 |
elementAll | 인덱스 요소 리턴 |
remove | 인덱스 요소 삭제 |
removeAllElements | 모든 요소 삭제, 크기 0으로 |
size | 요소 개수 리턴 |
capacity | 현재 벡터 용량 리턴 |
3. 컬렉션과 자동 박싱/언박싱
Vecrot<Integer> v = new Vector<Integer>();
v.add(Integer.valueOf(4)); //원래 컬렉션에는 기본 타입 삽입이 불가하니까 박싱을 해줘야 함
v.add(4); //하지만 자동박싱이 되므로 2줄처럼 하지 않아도 됨
int k = v.get(0); // Integer 타입을 int 타입으로 자동 언박싱, k=4
4. ArrayList<E>
- 가변 크기의 배열 구현
- 벡터와 달리 스레드 동기화 기능 없음
- Vector와 메소드 구성이 조금 다르다.
(1) capacity(배열의 용량 구하기) 없음
(2) 모든 요소 삭제
vector : removeAllElements()
arrayList : clear()
5. Iterator<E>
- Vector, ArrayList, LinkedList가 상속받는 인터페이스
boolean hasNext() | 방문할 요소가 남아 있으면 true 리턴 |
E next() | 다음 요소 리턴 |
void remove() | 마지막으로 리턴된 요소 제ㅓ |
6. HashMap<k,v>
- 특징
1) key와 value의 쌍으로 구성되는 요소를 다루는 컬렉션
2) 키와 값이 한 쌍으로 삽입
3) 삽입(put), 삭제(remove), 검색(get)이 빠른 특징
4) 키로만 검색 가능
7. LinkedList<E>
- 특징
1) 요소 객체들은 양방향으로 연결되어 관리됨
2) 요소 객체는 맨 앞, 맨 뒤에 추가 가능
3) 요소 객체의 인덱스를 이요하여 중간에 삽입 가능
4) 스택이나 큐로 사용 가능
8. collections 클래스 활용
-특징
1) 컬렉션에 대해 연산을 수행하고 결과로 컬렉션 리턴
2) 모든 메소드는 static 타입
sort() | 컬렉션에 포함된 요소들을 정렬 |
reverse() | 요소의 순서를 반대로 |
max(), min() | |
binarySearch() | 특정 값 검색 |
9. 제네릭 만들기
- 제네릭 만들기
1) 제네릭 클래스 작성- 클래스나 인터페이스 선언부에 일반화된 타입(Integer 등) 추가
public class MyClass<T>{
T val;
void set(T a){ val=a;}
T get() {return val;}
}
2) 제네릭 클래스에 대한 레퍼런스 변수 선언
MyClass<String> s; //<T>를 String으로 구체화
List<Integer> li; //<E>를 Integer로 구체화
3) 제네릭 객체 생성- 구체화 -> 기본 타입은 사용 불가, 클래스 내 제네릭 타입의 객체 생성 불가
MyClass<String> s = new MyClass<String>(); //제네릭 타입 T를 String으로 구체화
s.set("hello");
System.outn.println(s.get());
MyClass<Integer> n = new MyClass<Integer>(); //제네릭 타입 T를 Integer으로 구체화
- 제네릭과 배열- 제네릭에서 배열의 제한
1) 제네릭 클래스 또는 인터페이스 배열 허용x
G Stack<Integer>[] gs = new GStack<Integer>[10]; //불가
2) 제네릭 타입의 배열 허용x
T[] = new T[10]; //불가
3) 타입 매개변수의 배열에 레퍼런스는 허용
public void myArray(T[] a){ //가능
- 제네릭 메소드
: 제네릭 메소드를 호출할 때는 컴파일러가 메소드의 인자를 통해 이미 타입을 알고 있으므로 타입을 명시하지 않아도 됨.
- 제네릭의 장점
1) 컴파일 시에 타입이 결정되어 보다 안전한 프로그래밍 가능
2) 런타임 타입 충돌 문제 방지
3) ClassCastException 방지
'JAVA > 명품 자바 프로그래밍' 카테고리의 다른 글
자바 기초 문법 정리- 9장 자바 GUI 기초, AWT와 swing(손글씨) (0) | 2021.12.14 |
---|---|
자바 기초 문법 정리- 8장 입출력 스트림과 파일 입출력 (0) | 2021.10.17 |
자바 기초 문법 정리- 6장 모듈과 패키지 (0) | 2021.10.05 |
자바 기초 문법 정리- 4~5장 클래스~상속 (0) | 2021.09.30 |
[3장] 도전 문제 (0) | 2021.04.15 |