CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL
공부 STUDY/JAVA

[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)

[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)
공부 STUDY/JAVA

[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)

2023. 1. 15. 14:00

컬렉션 프레임워크

java.util패키지에는 자료를 다룰 수 있는 자료구조 클래스가 다수 존재한다. 

자료구조 클래스들을 컬렉션 프레임워크라고 한다.

 

  • 자료구조란 자료를 저장할 수 있는 구조
  • 책을 보관하기 위해서 책장을 이용하는 것처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법이 필요한데, 이러한 방법을 제공하는 것을 자료구조, 컬렉션 프레임워크이다.
  • 컬렉션 프레임워크에서 가장 기본이 되는 interface는 Collection인터페이스
    • Collection인터페이스는 여기에 자료가 있다라는 것을 표현.
    • 중복도 허용하고, 자료가 저장된 순서도 기억하지 못하는 것이 Collection인터페이스.
    • Collection이 가지고 있는 대표적인 메소드는 add(), size(), iterator() 메소드
    • Collection은 저장된 순서를 기억하지 못하기 때문에 "첫번째 자료를 달라, 두번째 자료를 달라"와 같은 기능을 가질 수 없다. * * Collection은 저장된 자료를 하나씩 하나씩 꺼낼 수 있는 Iterator라는 인터페이스를 반환한다.
      • Iterator는 꺼낼것이 있는지 없는지 살펴보는 hasNext()메소드와 하나씩 자료를 꺼낼때 사용하는 next()메소드를 가지고 있다.
  • Set자료구조는 중복을 허용하지 않는 자료구조를 표현하는 인터페이스
    • Collection인터페이스를 상속받는다.
    • Set인터페이스가 가지고 있는 add메소드는 같은 자료가 있으면 false, 없으면 true를 반환하는 add메소드를 가지고 있다.
  • List자료구조는 중복은 허용하면서 순서를 기억하는 자료구조를 표현.
    • Set인터페이스와 마찬가지로 Collection인터페이스를 상속받고 있다.
    • List는 순서를 기억하고 있기 때문에 0번째 1번째 n번째의 자료를 꺼낼 수 있는 get(int)메소드를 가지고 있다.
  • Map자료구조는 Key와 Value를 가지는 자료구조이다.
    • 저장할 때 put()메소드를 이용하여 key와 value를 함께 저장한다.
    • 원하는 값을 꺼낼때는 key를 매개변수로 받아들이는 get()메소드를 이용하여 값을 꺼낸다.
    • Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안된다.
    • Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key들에 대한 정보를 읽어들일 수 있는 Set을 반환하는 keySet()메소드를 가지고 있다.

컬렉션 프레임워크는 자바 프로그래밍에서 빠질 수 없는 필수적인 요소이다. 컬렉션은 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고, 관리할 수 있는 기능을 제공하는 일종의 컨테이너이다.

배열은 크기가 고정되어 있는데에 반해, 컬렉션 프레임워크는 가변적인 크기를 갖는 (Resizable) 등의 특징을 갖는다. 또한 데이터 삽입, 탐색, 정렬 등 편리한 API 를 다수 제공한다. 이런 이점으로 개발자는 배열보다는 적절한 컬렉션 클래스를 선택해 사용하는 것이 권장된다.

 

컬렉션 프레임워크는 JDK 1.2 버전부터 java.util 패키지에서 지원한다. JDK 1.2 이전에는 Vector, Properties, Stack, Hash Tables, Dictionary 같은 것들이 제공 되었는데, 통일성이 없었고 표준화된 인터페이스가 존재하지 않았다.

 

컬렉션 프레임워크의 이점

컬렉션 프레임워크는 아래와 같은 이점으로 프로그램의 유지보수를 쉽게 만들어준다.

  • List, Queue, Set, Map 등의 인터페이스를 제공하고, 이를 구현하는 클래스를 제공하여 일관된 API 를 사용할 수 있다.
  • 가변적인 저장 공간을 제공한다. 고정적인 저장 공간을 제공하는 배열에 대비되는 특징이다.
  • 자료구조, 알고리즘을 구현하기 위한 코드를 직접 작성할 필요 없이, 이미 구현된 컬렉션 클래스를 목적에 맞게 선택하여 사용하면 된다.
  • 제공되는 API 의 코드는 검증되었으며, 고도로 최적화 되어있다.

 

구성요소

컬렉션 프레임워크는 아래의 3가지 요소로 구성된다.

  1. 인터페이스 (Interfaces) : 각 컬렉션을 나타내는 추상 데이터에 대한 인터페이스 (List, Set, Map 등). 클래스는 이 인터페이스를 구현하는 방식으로 작성되었기 때문에 상세 동작은 달라도 일관된 조작법으로 사용할 수 있다.
  2. 클래스 (Classes) : 컬렉션 별 인터페이스의 구현 (Implementation). 위에서 언급했듯, 같은 List 컬렉션이더라도 목적에 따라 ArrayList, LinkedList 등으로 상세 구현이 달라질 수 있다.
  3. 알고리즘 (Algorithms) : 컬렉션이 제공하는 연산, 검색, 정렬, 셔플 (Shuffle) 등에 대한 메소드.

Collection Framework 의 종류

컬렉션 프레임워크는 아래와 같이 크게 4개로 분류할 수 있다.

  • 리스트 (List) : 인덱스 순서로 요소를 저장한다. 중복된 데이터를 저장할 수 있다.
  • 큐 (Queue) : 데이터가 저장된 순서대로 출력되는 선입선출 (FIFO: First In First Out) 의 구조를 갖는 선형 자료구조이다.
  • 집합 (Set) : 순서가 없으며, 데이터를 중복하여 저장할 수 없다. 집합 연산 (합집합, 교집합, 차집합 등) 을 지원한다.
  • 맵 (Map) : Key-value 쌍으로 데이터를 저장한다. 순서가 존재하지 않으며, Key 가 중복될 수 없다.

Collection Framework 계층

검정색은 인터페이스, 파랑색은 클래스, 실선 화살표는 상속, 점선 화살표는 구현을 의미한다.

컬렉션 프레임워크는 위와 같은 구조로 이루어져있다. 대표적으로 List , Queue , Set , Map 인터페이스로 구성되어 있으며, 세부적으로 여러 클래스가 해당 인터페이스를 구현하거나, 다른 인터페이스가 상속받는 구조로 되어있다.

Queue 는 인터페이스는 존재하나, 직접 구현된 클래스는 존재하지 않는다. 위 계층도를 살펴보면 LinkedList 가 List 인터페이스와 Deque 인터페이스를 둘다 구현하고 있는 모습을 볼 수 있다. 따라서 Queue 를 구현하려면 LinkedList 를 사용하여 구현할 필요가 있다. (PriorityQueue 는 FIFO 가 아닌, 요소의 우선순위에 따라 출력 순서가 바뀌므로 일반적인 Queue 가 아니다)

Map 인터페이스는 구조상 특징이 달라 List , Queue , Set 과 달리 Collection 를 상속받지 않는 모습을 볼 수 있다. Collection 은 Iterable 을 상속받고 있다. 

 

 

 

'공부 STUDY > JAVA' 카테고리의 다른 글

[JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?  (0) 2023.01.15
[JAVA] 제네릭 Generic  (0) 2023.01.15
[JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까?  (0) 2023.01.15
[JAVA] java.lang 패키지/오토박싱  (0) 2023.01.15
[JAVA] Object 클래스, 오버라이딩  (0) 2023.01.15
    '공부 STUDY/JAVA' 카테고리의 다른 글
    • [JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?
    • [JAVA] 제네릭 Generic
    • [JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까?
    • [JAVA] java.lang 패키지/오토박싱
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.