브래의 슬기로운 코딩 생활
JAVA 프로그래밍 12주차 정리 본문
Generic
참고
정의
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스를 컴파일 시점 타입 체크(compile-time type check)
를 해주는 기능을 의미함
일반화된 클래스나 메소드를 작성할 수 있는 기능
- C++ 템플릿(Template)과 유사한 기능
Java 1.5 이상에서 지원
장점
Generic 사용으로 인한 변화
Generic 사용 전
기존에는 다양한 종류의 타입을 다루는 메서드의 매개변수나 리턴 타입으로 Object타입의 참조변수를 많이 사용했고,
그로 인해 형변환이 필요함
Generic 사용 후
Object타입 대신 원하는 타입을 지정하면 해당 형으로 형변환이 필요하지 않음
- 타입을 지정하지 않는 경우 Object 타입으로 간주함
<>, 다이아몬드 연산자
배경
- 제너릭의 경우 선언과 생성시 타입 파라미터를 중복해서 사용해야 했기 때문에 사용이 불편하였음
- java 1.7부터 도입
<> 연산자의 기능
- 제너릭 생성 시 추론 타입 파라미터(inference type parameter)의 사용을 줄이는 데 사용
JCF (Java Collection FrameWork) 활용
기본 JCF 인터페이스
java.util.ArrayList
주요 특징
- 순서를 가지는 요소들의 모임
- 중복을 허용하고, 인덱스를 이용한 접근을 허용함
- 저장되는 요소들의 개수에 따라 자동적으로 크기가 변경됨
- 추가 연산을 실행하는 경우 오버헤드가 발생함 vs. LinkedList
- 스레드 안전 하지 않음(thread-unsafe) vs. Vector
크기 비교
- ArrayList 형 객체의 크기 : arrayList.size()
- 배열형 객체의 크기 : arrayName.length
- String형 객체의 크기 : strName.length()
java.util.Collections 활용
정의
- 컬렉션들에 대한 다양한 연산을 수행하거나 반환해주는 정적 메소드를 제공하는 클래스
java.util.Vector
정의 및 특징
- 순서를 가지는 요소들의 모임
- 중복을 허용하고, 인덱스를 이용한 접근을 허용함.
- 저장되는 요소들의 개수에 따라 자동적으로 크기가 변경됨 vs. 배열
- 추가 연산을 실행하는 경우 오버헤드가 발생함 vs. LinkedList
- 스레드 안전함(thread-safe) vs. ArrayList
ArrayList vs. Vector
자동 크기 조정가능한 배열 자료 구조
- 용량을 넘치거나 삭제가 발생하면 크기가 자동적으로 커지거나 줄어듦
Iterator, ListIterator 반환하여 순차 탐색하는 경우 : fail-fast 지원
입력 순서를 유지하는 순서있는 컬렉션
값의 중복과 널을 허용함
사이즈의 절반 크기로 증감 vs. 사이즈와 동일한 크기씩 증감
동기화 지원하지 않음 - 성능 우수 vs. 동기화 지원
Vector가 elements()를 이용하여 Enumeration를 반환한 경우 해당 순차 탐색은 fail-fast 지원하지 않음
java.util.LinkedList
정의 및 기능
List와 Deque 인터페이스를 구현한 이중 연결 리스트(doubly-linked list) 구현체
연속적인 공간에 요소를 저장하지 않음
삽입, 삭제가 용이하고, 이로 인한 내부 요소의 이동이 필요 없음
임의 접근을 제공하지 않고 순차 접근을 지원함
ArrayList vs. LinkedList 차이점
- 검색 속도 : O(1) vs O(n)
- 삭제/삭제 연산 성능 : O(n) - worst case, O(1) - best case vs. O(1) - 시작요소, 마지막 요소, 검색 + O(1) - 중간 요소
- 메모리 오버헤드 : 낮음 vs. 상대적으로 높음
java.util.HashMap
키와 값의 쌍으로 사용하는 컬렉션
동기화를 지원하지 않음, 스레드 안전하지 않음(thread-unsafe)
값의 중복은 허용하지만, 키의 중복은 허용하지 않음
키의 경우는 하나, 값의 경우 다수의 널 객체도 허용
java.util.HashTable
정의 및 기능
키들을 값에 매핑하는 해쉬 테이블을 구현한 클래스
널 아닌 객체만이 키나 값으로 사용될 수 있음
키로 사용되는 객체는 hashCode(), equals() 메소드를 구현해야만 함
HashMap vs. Hashtable
- 동기화 지원하지 않음, 스레드 안전하지 않음 vs. 동기화 지원함, 스레드 안전함
- null key, null values 허용함 vs. any null key or value 허용하지 않음
- 속도가 빠름 vs. 속도가 느림
- fail-fast 지원함 vs. fail-fast 지원하지 않음
- AbstractMap 상속 vs. Dictionary 상속
HashSet
주요 특징
Set 인터페이스의 구현체, 중복 요소를 허용하지 않음
널 값은 허용함
iterator 를 이용한 순차접근시 fail-fast 지원
순서를 유지하지 않음
- LinkedHashSet은 삽입 순서 유지
동기화를 지원하지 않음
HashSet vs. TreeSet
•구현 : hashing 사용 vs. red-black tree 사용
•속도 : 빠름 vs. 느림 - log(n)
•순서 : 유지하지 않음 vs. 삽입 순서와 관계없지만 값 기준 오름차순 정렬
Set 인터페이스 구현체
-순서를 유지하지 않음
중복을 허용하지 않음
java.util.Arrays
정의 및 기능
- 배열들을 조작(정렬, 찾기 등)하기 위한 다양한 메소드를 제공하는 클래스
'2-1 > JAVA 프로그래밍' 카테고리의 다른 글
JAVA 프로그래밍 기말고사 정리 (0) | 2023.06.21 |
---|---|
JAVA 프로그래밍 13주차 정리 (0) | 2023.05.31 |
JAVA 프로그래밍 11주차 정리 (0) | 2023.05.16 |
JAVA 프로그래밍 10주차 정리 (2) | 2023.05.09 |
JAVA 프로그래밍 중간고사 정리 (0) | 2023.04.29 |