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
Tags
more
Archives
Today
Total
관리 메뉴

개발새발

#제네릭 #컬렉션 프레임워크 본문

자바

#제네릭 #컬렉션 프레임워크

개발하는후추 2022. 7. 27. 23:37

제레닉 (Generic)

  • 클래스 내부에서 사용할 데이터 타입을 외부에서 파라미터 형태로 지정하면서 데이터 타입을 일반화 한다
  • 제네릭 없이 객체에 여러 자료형을 받을 수 있도록 하여면 int,float,string등 모든 자료형에 대해 클래스를 하나씩 만들어야 한다
  • 제네릭을 사용하면 가상의 자료형을 정의 후, 객체를 정의할 때 타입 매개변수를 선언하여 사용한다
  • 제네릭은 클래스 & 인터페이스 뒤에 <>안에. 타입 파리미터를 넣어 작성한다
  • 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형을 변환 될 수 있도록 프로그래밍 하는것
  • Static 이 있으면 사용불가

public class 클래스명<타입 매개변수>{ ... }

public interface 인터페이스명<타입 매개변수>{ ... }

장점 1. 타입체크와 형변환을 생략해서 간결한 코드 작성이 가능하다 /// 2. 클래스나 메서드 내부에서 사용되는 객체의 타입 안정성을 제공한다

접근 제어자 class 클래스명 { // 제네릭 타입 매개변수가 1개일 때
//타입 T를 사용한 코드
}

접근 제어자 class 클래스명<K, V> { //제네릭 타입 매개변수가 2개일때
//타입 K, V를 사용한 코드
}

class Basket {}

Basket ——> 원시 타입 (raw를 의미)
Basket ——> T Basket
T ——> 타입 매개변수 or 타입 변수

다이아몬드 연산자 <>

  • 생성자의 타입 매개변수를 컴파일러가 문맥을 통해 추론

와일드 카드(wild card)

  • 제한을 두지 않는 기호를 의미
  • 제네릭에서는 ? 기호를 사용

//<?> //타입 매개변수에 모든 타입 사용
//<? extends T> ——> T 타입과 T타입을 상속받는 하위 클래스 타입만 사용
//<? super T> ——> T 타입과 T타입을 상속받은 상위 클래스 타입만 사용

제네릭 메서드

  • 클래스 전체를 제네릭으로 선언할 수도 있지만, 클래스 내부의 특정 메서드만 제네릭으로 선언할 수 있음

컬렉션 프레임워크(Collection Framework)

  • 데이터를 저장하기 위해 자료구조를 바탕으로 객체들을 효율적으로 추가,삭제 검색할 수 있도록 컬렉션을 만들고, 관련된 인터페이스와 클래스를 포함 시켰다 이걸 컬렉션 프레임워크라고 부른다
  • 주로 List, Set, Map이 있다
  • List, Set은 객체를 추가, 삭제, 검색하는 방법에 많은 공통점이 있다, 이 인터페이스들의 공통된 메서드만 모아 컬렉션 인터페이스로 정의
  • Map은 키와 값을 하나의 쌍으로 묶어서 관리하는 구조로, 독립된 인터페이스로 분리되어 있다

인터페이스 특징 구현 클래스
List 순서를 유지하고 저장, 중복저장 가능 ArrayList, Vector, Stack, LinkedList 등
Set 순서를 유지하지 않고 저장, 중복저장 불가능 HashSet, TreeSet 등
Map 키,값 쌍으로 저장, 순서 유지하지 않은, 키는 중복저장 불가 HashMap, Hashtable, TreeMap, Properties 등

List

ArraryList

  • 인터페이스를 구현한 클래스
  • 가장 빈번하게 사용된다
  • 기능적으로 Vector와 동일하지만 기존의 Vector을 개선한 것이므로, ArratList를 주로 사용
  • 첫번째

객체가 인덱스로 관리된다는 점에서 배열과 유사하다 /////// 배열과 달리 저장 용량을 초과한 객체들이 들어오면, 자동으로 저장 용량아 늘어난다
리스트 계열 자료구조의 특성을 이어받아 데이터가 연속적으로 존재

List<타입 파라미터> 객체명 = new ArrayList<타입 파라미터>(초기 저장용량);

ex) List container2 = new ArrayList(30);

LinkedList

  • 데이터를 추가,삭제,변경하기 위해 사용
  • 배열에는 모든 데이터가 연속적으로 존재하지만, LinkedList에는 불연속적으로 존재
  • 데이터는 서로 연결되어 있다

데이터의 잦은 변경이 예상된다면 LinkedList를, 데이터의 개수가 변하지 않는다면 ArrayList를 사용하는 것이 좋다

Iterator

  • 컬렉션에 저장된 요소를 읽어오는 방법
  • iterator() 메서드를 정의하여 각 요소에 접근 Collection인터페이스를 상속받는 List와 Set인터페이스에서도 사용
  • iterator에서 하나의 객체를 가져올 때는 next() 메서드를 사용
  • next()를 사용하기전에 먼저 가져올게 있는지 확인하는게 좋다 hasNext() ——> 가져올게 있으면 true 없으면 fasle
    while(iterator.hasNext()){
		sout(arrayList.next());
}```



Set

- 요소의 중복을 허용하지 않고, 저장 순서를 유지하지 않는다 


HashSet
Hashset <Integer> A = new Hashset<Integer>();

- 순서가 없이 저장한다 // 두 번 중복된 정보가 있으면 한 번만 저장한다
- 중복을 허용하지 않는다 
- A.containsAll(B) —————> A라고 하는 집합에 B의 요소 전체가 담겨있냐?

- A.addAll(B) —————>A라는 집합에 B를 다 합쳐서 A를 만든다

- A.retainAll(B) ————> A에도 있고 B에도 있는 값을 A에 담겠다

- A.removeAll(B) —————> A에서 B를 뺀 값을 A에 담겠다

TreeSet
- 이진 탐색 트리형태로 데이터를 저장 
- 데이터의 중복 저장을 허용하지 않고 저장 순서를 유지하지 않는 Set인터페이스의 특징은 그대로 유지

이진탐색트리(binary Search Tree) 
- 하나의 부모 노드가 최대 두 개의 자식 노드와 연결되는 이진트리
- 정렬과 검색에 특화
- 모든 왼쪽 자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식의 값이 루트나 부모보다 큰 값을 가진다



Comparator ////// Comparable


Comparable 
- 비교대상(매개변수)과 자기 자신을 비교
- compareTo() 메서드를 사용해 객체를 정렬

Comparator
- 매개 변수인 두 객체를 비교



Map
- 인터페이스의 키와 값으로 구성된 Entry 객체를 저장하는 구조
- 어떤 두 데이터를 연결한다는 의미

- 키는 중복 저장될 수 없지만, 값은 중복 저장이 가능
- 기존에 저장된 키와 동일한 키로 값을 저장하면, 기존의 값은 없어지고 새로운 값으로 대치

- HashMap<String, Integer> a = new HashMap<String, Integer>();
a. put(“one”, 1);            ————> .put은 Map에서만 존재 
sout(a.get(“one”); ———> 1

기능	리턴 타입	메서드	설명
객체 추가	Object	put(Object key, Object value)	주어진 키로 값을 저장, 새로운 키일 경우 null을 리턴하고 동일한 키가 있을 경우 값을 대체하고 이전값을 리턴
객체 검색	boolean	containsKey(Object key)	주어진 키가 있으면 true, 없으면 false를 리턴
	boolean	containsValue(Object value)	주어진 값이 있으면 true, 없으면 false를 리턴
	Set	entrySet()	키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴
	Object	get(Object key)	주어진 키에 해당하는 값을 리턴
	boolean	isEmpty()	컬렉션이 비어 있는지 확인
	Set	keySet()	모든 키를 Set 객체에 담아서 리턴
	int	size()	저장된 키-값 쌍의 총 갯수를 리턴
	Collection	values()	저장된 모든 값을 Collection에 담아서 리턴
객체 삭제	void	clear()	모든 Map.Entry(키와 값)을 삭제
	Object	remove(Object key)	주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴


HashMap



- 해시 함수를 통해 ‘키’ , ’값’ 이 저장되는 위치를 결정
- 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치 또한 관계가 없다


Map<Key, Value> map = new HashMap<Key, Value>();

Map<Key, Value> map = new HashMap<Key, Value>(capacity, loadFactor);

'자바' 카테고리의 다른 글

#enum #애노테이션  (0) 2022.07.27
# 내부 클래스  (0) 2022.07.27
복습  (0) 2022.07.27
배운걸로 혼자 코드 짜보기  (0) 2022.07.27
#다형성 #추상화 #final #인터페이스  (0) 2022.07.27
Comments