TIL

  1. Collection Framework
  2. 최상위 인터페이스
    1. Iterable
    2. Collection
  3. 핵심 인터페이스
    1. List
    2. Set
    3. Map

 


 

Collection

여러 객체(데이터)를 모아 놓은 것을 의미한다.

 

 

Framework

  • 기능 제공 뿐만 아니라 표준화, 정형화 된 체계적인 프로그래밍 방식
  • 자유도가 떨어진다고 볼 수 있지만 정해진대로 하면 되니 생산성이 올라간다.
  • 유지보수가 쉽다.

(* 라이브러리는 단순히 기능만 제공)

 

 

Collection Framework

  • 컬렉션(여러 객체)을 다루기 위한 표준화 된 프로그래밍 방식
  • 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공한다.
    • 객체를 저장, 삭제, 검색, 정렬 하는 것을 쉽게 다룰 수 있다.
  • java.util 패키지에 포함 되어있고 JDK1.2부터 표준화하여 제공했다.
  • 컬렉션 프레임워크에 저장할 수 있는 데이터는 오직 Object 뿐이다. int형 같은 자바의 primitive 타입은 저장할 수 없다. 만약 primitive 타입 wrapper 타입으로 Boxing 하여 저장해야한다. 객체를 저장한다는 것은 주소값을 저장한다는 의미이니 null 저장도 가능하다.

 

 

 

최상위 Interface

  1. Iterable
  2. Collection

List 인터페이스와 Set 인터페이스를 구현한 컬렉션 클래스들은 단일 데이터를 저장하는 등의 공통점이 많기 때문에 그 공통점을 모아둔 Collection 인터페이스를 상속 받는다.

 

 

Iterable Interface

  • 컬렉션 인터페이스의 가장 최상단 인터페이스
  • Iterator 객체를 관리한다.

 

리턴 타입 메소드명 설명
Iterator iterator() 컬렉션에서 Iterator를 구현함
void forEach(Consumer<? super T> action) 함수형 프로그래밍 전용 루프 메소드
Spliterator spliterator() 파이프라이닝 관련 메소드

(* 함수형 프로그래밍, Consumer, 파이프라이닝에 대한 추가학습 필요)

 

 

Collection Interface(API)

  • List, Set, Queue가 상속 받는 인터페이스
  • 업캐스팅으로 다양한 종류의 컬렉션 자료형을 받아 데이터를 저장, 삭제, 검색 할 수 있다. (다형성)
  • 해당 인터페이스의 메소드를 살펴보면 데이터를 get 하는 메소드는 없다. 왜냐하면 상속 받는 각 자료형마다 자료구조가 제각각이기 때문에 상위 타입인 Collection 타입으로 조회하는데 까다롭기 때문이다.

 

 

 

핵심 Interface

  1. List
  2. Set
  3. Map

 

 

List(API)

  • 저장순서가 있는 데이터의 집합
  • 데이터의 중복을 허용
  • 배열과 가장 큰 차이점은 데이터의 양에 따라 동적으로 늘어나고 줄어들 수 있다.
  • 각 요소 사이에 빈 공간을 허용하지 않아 삽입, 삭제할 때마다 배열 이동이 일어난다.
  • 구현 클래스: ArrayList, LinkedList, Stack, Vector
    • ArrayList와 Vector는 거의 비슷한데 Vector는 예전에 만들어진 클래스다. ArrayList는 여러명이 달려들어 값을 변경하려고 하면 문제가 발생할 수 있고 Vector는 그렇지 않다. 즉, ArrayList는 동기화 보장이 안 되고 Vector는 동기화를 보장한다.
  • ex) 대기자 명단

 

 

Set(API)

  • 저장순서가 없다.
  • 데이터의 중복을 허용하지 않는다.
  • 저장순서가 없으므로 index를 통해 객체를 get하는 기능도 없다.
  • 중복 저장이 불가하므로 null 값도 하나만 저장할 수 있다.
  • 집합과 관련된 메소드들이 있는데 컬렉션에 변화가 있으면 true, 아니면 false를 반환한다.
  • 구현 클래스: HashSet, TreeSet, LinkedHashSet
  • ex) 양의 정수집합, 소수의 집합

 

 

Map(API)

  • key와 value가 쌍으로 이루어진 데이터의 집합
  • 저장순서가 없다.
  • key는 중복을 허용하지 않고 value는 중복을 허용한다.
  • key 값을 반환할 때, Set 인터페이스 타입으로 반환하고 value 값을 반환할 때, Collection 타입으로 반환한다. 그 이유는 key 값을 중복을 허용하지 않기 때문에 Set 타입으로 반환하고 value 값은 중복을 허용하기 때문에 Collection 타입으로 반환하는 것이다.
  • 구현 클래스: HashMap, TreeMap, HashTable, LinkedHashMap
    • HashTable과 HashMap은 같은데 HashTable은 예전에 만들어진 클래스다. HashTable은 동기화가 되고 HashMap은 동기화 되지 않는다. (기능이 따로 제공되긴 한다.)
  • ex) 지역번호 (02 - 서울, 031 - 경기)

 

 

 

📚 참고
자바의 신 22장
Java Collections Framework 종류 💯 총정리
Collection, List, Set, Map
컬렉션프레임웍과 핵심 인터페이스