Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 12주차 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 12주차 정리

김브래 2023. 5. 23. 19:04

Generic


참고

 

정의

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스를 컴파일 시점 타입 체크(compile-time type check)

를 해주는 기능을 의미함

 

일반화된 클래스나 메소드를 작성할 수 있는 기능

- 클래스에서 사용할 타입을 클래스 설계 시 지정하는 것이 아니라 사용할 때 생성하는 기술을 의미함.
- 하나의 코드로 여러 가지 타입을 처리하는 기술

- C++ 템플릿(Template)과 유사한 기능

 

Java 1.5 이상에서 지원

 

장점

컴파일 시점에 엄격한 타입 체크를 통해 타입 안정성을 제공한다.
 
타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
- 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
- 간단히 얘기하면 다룰 객체의 타입을 미리 명시해줌으로써 형변환을 하지 않아도 되게 하는 것이다.

 

Generic 사용으로 인한 변화

Generic 사용 전

 

기존에는 다양한 종류의 타입을 다루는 메서드의 매개변수나 리턴 타입으로 Object타입의 참조변수를 많이 사용했고,

그로 인해 형변환이 필요함

 

Generic 사용 후

 

Object타입 대신 원하는 타입을 지정하면 해당 형으로  형변환이 필요하지 않음

- 타입을 지정하지 않는 경우 Object 타입으로 간주함

Generic 적용 전 / 후

<>, 다이아몬드 연산자

배경

- 제너릭의 경우 선언과 생성시 타입 파라미터를 중복해서 사용해야 했기 때문에 사용이 불편하였음

- 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. 동기화 지원

 

Vectorelements()를 이용하여 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

정의 및 기능

- 배열들을 조작(정렬, 찾기 등)하기 위한 다양한 메소드를 제공하는 클래스