TIL) Java - 컬렉션 프레임워크

oatraspberry·2022년 12월 19일
post-thumbnail

컬렉션(Collection) 프레임워크(Framework)의 개념과 구조

컬렉션(Collection)

  • 동일한 타입을 묶어 관리하는 자료구조

    배열과의 차이점?
    [배열의 특징 2가지]
    -동일한 타입만 묶어서 저장 가능
    -생성시 크기를 지정하여야 하며 추후 변경 불가(컬렉션과의 차이점)

  • 저장 용량을 동적으로 관리

프레임워크(Framework)

클래스 또는 인터페이스를 생성하는 과정에서 설계의 원칙 또는 구조에 따라 클래스 또는 인터페이스를 설계하고, 이렇게 설계된 클래스와 인터페이스를 묶어 놓은 개념.

  • 클래스와 인터페이스의 모임(라이브러리)
  • 클래스의 정의에 설계 원칙 또는 구조가 존재

컬렉션 프레임워크

  • 리스트, 스택, 큐, 트리 등의 자료구조에 정렬, 탐색 등의 알고리즘을 구조화해놓은 프레임워크

선형 자료 구조

리스트(List)

  • 순서가 있는 저장 공간
  • 하나의 자료가 다른 자료를 가리키며 자료들을 축적해 나가는 구조
  • 개수가 정해져 있지 않은 자료들을 다룰 때에 유용
  • 배열에 비해 불필요한 빈 공간을 낭비하지 않음
  • 단, 인덱스(index)가 없어, 접근 시 배열과 달리 한 번에 찾기가 어려움
  • 주로 순서가 있는 데이터를 목록으로 이용할 수 있도록 만들어진 인터페이스

    배열: 저장공간 크기 고정
    리스트: 저장공간 크기 동적변환

List<E> 컬렉션의 객체 생성

방법1. List<E> interface의 구현 클래스 생성자로 동적컬렉션 생성 -> 데이터의 추가 삭제 가능

List<제네릭타입지정> aList1 = new ArrayList<제네릭타입지정>();
List<제네릭타입지정> aList2 = new Vector<제네릭타입지정>();
List<제네릭타입지정> aList3 = new LinkedList<제네릭타입지정>();
ArrayList <제네릭타입지정> aList1 = new ArrayList<제네릭타입지정>();
Vector <제네릭타입지정> aList2 = new ArrayList<제네릭타입지정>();
LinkedList <제네릭타입지정> aList3 = new ArrayList<제네릭타입지정>();
  • 기본 생성자의 경우 원소 10개를 저장할 수 있는 저장공간(capacity) 확보

  • 단, 저장공간은 메모리 공간만을 의미하며 컬렉션의 크기(size())와는 무관함.

  • 추후 원소가 많아지면 저장공간을 자동 추가

  • 생성자 매개변수로 저장공간의 크기를 직접 넘겨줄 수 있음 (단, LinkedList<E>는 제외.)

  • 배열처럼 수집(collect)한 원소(Element)를 인덱스(index)로 관리

    List<E>의 주요 메서드: add(추가), set(변경), remove(삭제), get, size, isEmpty, toArray

방법2. Arrays.asList(T ...) 메서드를 이용하여 정적컬렉션 생성 ->

1. LinkedList

  • 데이터(item)와 주소로 이루어진 클래스를 만들어 서로 연결하는 방식
  • 양방향 포인터 구조로 데이터의 삽입(insert/add), 삭제(remove/delete)가 빈번할 경우 빠른 성능을 보장
  • 스택, 큐, 양방향 큐 등을 만들기 위한 용도

2. Stack

  • LIFO(Last In First Out Out), 후입선출 형식을 갖는 구조
  • 스택 자료 구조

3. Vector

  • 동시 접속 고려
  • ArrayList와 동일한 내부구조로 동일하게 사용 가능
  • ArrayList의 이전 버전이며, 모든 메소드가 동기화됨
  • Vector 내부에 값이 추가될 때 자동으로 크기가 조절되고 객체들은 한자리씩 뒤로 이동함.
  • 하나의 스레드가 실행완료되어야 다른 스레드들이 실행된다.

4. ArrayList

  • 동기화 보장하지 않음
  • 객체 내부에 있는 배열에 데이터를 저장
  • 상당히 빠르고 크기를 맘대로 조절할 수 있는 배열
  • 단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
  • 동시 접속 대신 빠른 속도가 장점.
  • java.util 패키지에 소속.
  • 표준 배열보다는 느리지만 배열에서 많은 조작이 필요한 경우에 사용함
  • List 인터페이스에서 상속받아 사용
  • 객체가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량이 늘어남.

큐(Queue)

  • FIFO(First In First Out) 형식을 갖는 구조
  • 프린터기와 같이 먼저 들어온 자료에 대한 수행이 이루어짐

비선형 자료 구조

트리

  • 하나 이상의 Node(노드)로 이루어진 유한 집합
  • 자료를 저장하면서 다른 노드로 뻗어 나가는 나뭇가지 구조
  • 파일 구조와 같이 자료와 자료 사이의 종속 관계를 나타낼 때에 사용

기타 자료 구조

집합

profile
개발자가 될테야

0개의 댓글