본문 바로가기

Java/information

[자바/JAVA] 제네릭 컬렉션 프레임워크

생성자 함수의 매개변수 값으로 결정한 타입을 매개변수로 넣게 되면 <> 다이아몬드 기호도 생략이 가능하다.
구체적인 타입을 명시적으로 지정했으 때 메소드 앞에 <>기호도 생략 가능하다.

제한된 제네릭 타입
<T extends V> 
-제네릭 T 자리에는 클래스 타입이 V이거나 V클래스의 하위 클래스 타입만 올 수 있다는 뜻이다.
인터페이스를 사용해도 implements가 아닌 extends 키워드를 사용한다.

타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 종종 있다. 예를 들면 숫자를 연산하는 제네릭 메소드는 매개값으로 Number타입 또는 하위 클래스 타입(Byte, Short, Integer, Long, Double)의 인스턴스만 가져야 한다. 이것이 제한된 타입 파라미터(bounded type parameter)가 필요한 이유이다.
제한된 타입 파라미터를 선언하려면 타입 파라미터 뒤에 extends 키워드를 붙이고 상위 타입을 명시하면 된다. 상위 타입은 인터페이스도 가능하다. 인터페이스라고 해서 implements를 사용하는 것이 아니라 동일하게 extends를 사용한다.
 =>public <T extends 상위타입> 리턴타입 메소드명(매개변수,..){...}

와일드카드 인수
-'?'로 나타냄 : 와일드카드 자리에는 어떤 클래스 타입도 올 수 있다는 의미이다.

컬렉션 프레임워크
-자료구조는 컴퓨터 메모리에 데이터를 저장하는 형태 대표적인 자료 구조는 '배열'
배열 외에도 ArrayList, LinkedList, Stack 등과 같은 자료 구조가 자바 API에서 제공
컬렉션 프레임워크는 이러한 자료 구조 패키지들을 말한다.
컬렉션 프레임워크와 자식 클래스는 interface이다.

List : 순서가 있는 데이터 집합으로 데이터 중복을 허용한다. (구현 클래스 : ArrayList, LinkedList, Stack, Vector 등)
Set : 순서가 없는 데이터 집합으로 데이터 중복을 허용하지 않는다. (구현 클래스 : HashSet, TreeSet 등)
Map : <key, value> 쌍으로 이루어진 데이터 집합으로 순서가 없음 키는 중복될 수 없고, 값은 중복 가능하다. (구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등)
-위의 클래스에는 레퍼런스 타입의 데이터인 객체만 저장 가능, 기본 자료형을 저장하려면 wrapper 클래스를 이용해야한다.
-List, Set, Map 인터페이스 모두 Collection 인터페이스를 상속받는다.

List 컬렉션
List는 배열과 비슷하게 객체를 인덱스로 관리한다. 배열과의 차이점은 저장 용량이 자동으로 증가하며, 객체를 저장할 때 자동 인덱스가 부여된다는 것이다.
그리고 추가, 삭제, 검색을 위한 다양한 메소드들이 제공된다.
List는 객체 자체를 저장하는것이 아니라 객체의 번지를 참조한다. 그렇기 때문에 동일한 객체를 중복 저장할 수 잇는데 이경우 동일한 번지를 참조된다. null도 저장이 가능하며, 이 경우 해당 인덱슨느 객체를 참조하지 않는다.

Set 컬렉션
List는 객체의 저장 순서를 유지하지만, Set은 저장 순서가 유지되지 않는다 또한 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있다.
Set은 수학의 집합과 비슷하다. 집합은 순서와 상관없고 중복이 허용되지 않기 때문이다.
그리고 구술 주머니와도 같다. 동일한 구슬을 2개 넣을 수 없고, 들어갈(저장할) 때의 순서와 나올(찾을)때의 순서가 다를 수도 있기 때문이다.

Map 컬렉션
Map은 키와 값으로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.
Entry는 Map 인터페이스 내부에 선언된 중첩 인텊이스이다. 여기서 키와 값은 모두 객체이다.
키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체된다.

'Java > information' 카테고리의 다른 글

[자바/JAVA] 컬렉션 프레임워크  (0) 2023.06.09
[자바/JAVA] Iterator와 ListIterator  (0) 2023.06.08
[자바/JAVA] generic  (0) 2023.06.01
[자바/JAVA] 보조 스트림  (0) 2023.05.30
[자바/JAVA] Stream  (0) 2023.05.25