무작정 개발.Vlog

[IT 기술 면접] Java의 Collection Framework 이란?

by 무작정 개발
반응형

 

이번에는 Java의 Collection에 대해 정리할 것이다.

 

 


 

▶ Collection Framework (JCF)

 

Java에서 Collection 이란 데이터의 집합, 그룹을 의미하며

JCF(Java Collections Framework)객체들을 한 곳에 모아 관리하고, 편하게 사용하기 위해 제공되는 환경이고,

데이터, 자료구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다.

  • Collection에는 List, Map, Set, Stack, Queue와 같은 것들이 있다.

 

왜 Collection을 사용하는 것일까?

  • 그 이유는 다수의 Data(데이터)를 다루는데 표준화된 클래스들을 제공해주기 때문에 DataStructure(자료구조)를 직접 구현하지 않고 편하게 사용할 수 있기 때문이다.
  • 또한 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로, 상황에 따라 객체의 수를 동적으로 정할 수 있다.
  •    이는 프로그램의 공간적인 효율성을 높여준다.

Java Collection Framework(JCF) 상속 구조

 

JCF 상속 구조_ 출처 : 맨 하단에 기재
JCF 상속 구조_ 출처 : 맨 하단에 기재

Collection 인터페이스는 크게 List, Set, Queue(큐)로 크게 3가지 상위 인터페이스로 분류할 수 있다.

그리고 Map은 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다.

 

▶ List

List 인터페이스를 직접 @Override(오버라이드)를 통해 사용자가 정의하여 사용할 수도 있으며,

대표적인 구현체로는 ArrayList와 LinkedList가 있다.

순서가 있는 데이터의 집합으로 데이터의 중복을 허용

 

  ○ ArrayList

     Java의 Vector를 개선한, 배열로 구현된 List이다. 즉, 데이터가 저장된 순서가 같다는 뜻이다.

     사실상 배열과 같은 자료구조이기 때문에, List의 연산 자체의 수행 시간 속도는 배열과 같다.

      - 단방향 포인터 구조로 각 데이터에 대한 인덱스(Index)를 가지고 있어 조회 기능에 성능이 뛰어남

 

  ○ LinkedList

     다음 노드의 주소를 기억하고 있는 List로, 배열에 비해 삽입과 삭제가 간단하다.

     하지만, 탐색(검색)의 경우 첫 번째 노드부터 탐색하기 때문에 속도가 느리다.

     - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용하다.

     - Stack(스택), Queue(큐), 양방향 큐 등을 만들기 위한 용도로 쓰임


▶ Map

대표적인 구현체로 HashMape이 존재한다.

Key(키) - Value(값)의 쌍으로 이루어진 데이터의 집합으로, 데이터 순서를 보장하지 않으며

key(키)의 중복을 허용하지 않으나 Value(값)의 중복은 허용한다.

※ key에 대한 순서를 보장하기 위해서는 LinkedHashMap 을 사용

 

  ○ HashMap

     가장 일반적으로 사용하는 Map이다. 

     Key값에 해시 함수를 적용하여 나온 Index에 Value를 저장하는데, 중복과 순서가 허용되지 않으며 null값이 올 수 있다.

 

  ○ HashTable

     HashMap보다는 느리지만 동기화를 지원한다.

     HashMap과 다른 점은 Key값 혹은 Value값에 null을 넣으면 컴파일 에러 발생

 

  ○ TreeMap

     Red-Black Tree 자료구조를 이용한 Map이다.

     Tree(트리) 구조이기에 어느 정도 순서를 보장한다.

     정렬된 순서대로 Key, Value를 저장하여 검색이 빠르다.

 


▶ Set

대표적인 구현체로 HashSet이 존재한다.

value(값)에 대해서 중복된 값을 저장하지 않는다. 사실 Set 자료구조는 Map의 key-value 구조에서

key 대신 value가 들어가 value를 key로 하는 자료구조일 뿐이다. 

Map과 같이 Set도 순서를 보장하지 않으며 순서를 보장하기 위해서는 LinkedHashSet를 사용한다.

※ 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.

 

  ○ HashSet

     HashMap에서 Key값이 없는 자료형 집합이라고 생각해도 무방하다.

     value(값)이 포함되어 있는지 아닌지만 관심이 있다. 순서를 보장하지 않으며, 중복 값을 허용하지 않는다.

     가장 빠른 임의 접근 속도이고, 순서를 예측할 수 없다.

 

  ○ TreeSet

     Red-Black Tree 자료구조를 사용한 Set이다.

     정렬 방법을 지정할 수 있다.


▶ Stack & Queue (스택, 큐)

 

  ○ Stack

     직접 new 연산자로 객체를 생성하여 사용 가능

  ○ Queue

     LinkedList에 new 연산자로 객체를 생성함으로써 사용 가능

 


▶ Collection 인터페이스의 특징 (요약)

인터페이스 구현 클래스 특징
Set HashSet
TreeSet
순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
List LinkedList
Vector
ArrayList
순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
Map HashMap
HashTable
TreeMap
Key(키) - Value(값)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며
key(키)의 중복을 허용하지 않으나 value(값)의 중복은 허용한다.
Queue LinkedList
PriorityQueue
List와 유사

 


[출처 및 참고 문헌]

https://velog.io/@hygoogi/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0#java

 

기술면접 준비하기

기술면접 빡세게 준비하자

velog.io

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java#collection

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: Technical-Interview guidelines written for those who started studying progr

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: Techn...

github.com

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기