본문 바로가기
Back-end/Java 개념

Collections와 Collection에 대하여

by devraphy 2022. 5. 9.

0. 개요

- Java를 공부하다 보면 Collections와 Collection을 반드시 만나게 된다.

- 이 둘은 독립된 존재이면서 동시에 떨어질 수 없는 관계를 가지는데, 직접 파보기 전까지 이해하기가 힘들다.

- 이번 포스팅에서는 Collections와 Collection의 차이점과 관계에 대해서 알아보자. 

 

1. Collection이란?

- Collection은 자료구조를 다루기 위한 기본 메서드와 반복자를 제공하는 인터페이스다.

 

a) Collection은 Interface다.

- 다음 사진은 Java 8 공식 문서의 collection에 대한 설명이다.

 

 

- Collection은 Iterable을 상속받은 인터페이스다.

- 보통 인터페이스는 공통된 메서드를 상속하기 위한 목적으로 작성된다.

- 그렇다면 이런 질문을 할 수 있겠다.

    → Collection은 무엇을 위한 공통 메서드일까?

    → 왜 Iterable을 상속받았을까? 

 

 

b) Iterable을 상속받은 이유

- 다음 사진은 Java 8 공식 문서의 Iterable에 대한 설명이다.

 

 

- Iterable은 for-each loop를 사용할 수 있게 된다.

- 즉, 반복자(= Iterator)를 사용할 수 있다는 것이다. 

 

- 그러므로 Collection은 반복되는 것을 다루기 위해 Iterable을 상속받는다는 것을 추론할 수 있다.

- 그렇다면 Collection에는 어떤 추상 메서드가 있으며, 어떤 목적으로 사용될까? 

 

 

c) Collection 인터페이스의 역할 

- 다음 사진은 Java 8 공식 문서에서 가져온 Collection 인터페이스의 추상 메서드 목록이다.

 

 

- 자료구조나 알고리즘을 공부했다면 위의 메서드와 친숙할 것이다.

- 이 추상 메서드는 자료구조를 다룰 때 사용하는 메서드다.

- 즉, Collection 인터페이스는 자료구조를 다룰 때 필요한 메서드를 선언한 것이다.

- 그렇다면 이 메서드들은 어떻게 사용될까? 

 

 

d) Collection 인터페이스의 사용

- 다음 사진은 Java 8 공식 문서의 Collection에 대한 설명이다.

 

 

- Collection 인터페이스를 상속받은 하위 인터페이스를 살펴보면 다음과 같은 대표적인 자료구조를 확인할 수 있다.

   → List, Queue, Set

 

- 즉, Collection 인터페이스는 자료구조를 구현하거나 자료구조의 바탕이 되는 인터페이스를 구현할 때 사용된다. 

 

 

e) 결론 

- Collection은 자료구조를 다루기 위해 필요한 기본적인 메서드와 반복자를 제공하는 인터페이스다.

 

 

2. Collections란?

- Collections는 자료구조의 특성에 따라 정렬, 탐색, 셔플 등의 메서드를 구현한 클래스다.

 

a) Collections는 Class다.

- 다음 사진은 Java 8 공식 문서의 Collections에 대한 설명이다.

 

 

- Collections는 Object 클래스를 상속받는 Class다.

- Class이기 때문에 최상위 클래스인 Object를 상속받는 것은 너무나도 당연한 것이다.

 

 

b) Collections 클래스의 역할 

- Collections 클래스에는 다양한 메서드가 선언되어 있다.

- 해당 메서드는 다음 링크에서 확인하는 것을 권장한다. 

 

- Collections 클래스의 메서드는 Collection 인터페이스를 구현한 객체가 사용할 수 있는 메서드다.

- 자료구조의 특성에 따라 사용할 수 있는 정렬, 탐색, 셔플 기능의 메서드가 구현되어 있다. 

 

- 즉, 구현된 객체(= 료구조)의 특성에 따라 사용할 수 있는 메서드가 정의되어있다.

 

 

3. Java Collections Framework

a) Collections Framework의 등장

- Java 8 공식 문서에서 Collection과 Collections를 찾아보면 다음과 같은 설명이 적혀있다.

Collection 인터페이스 설명의 일부

 

Collections 클래스 설명의 일부

 

- 이처럼 Java Collections Framework에 포함된다는 것을 확인할 수 있다.

 

 

b) Java Collections Framework란?

- 이름 그대로, Java에서 제공하는 프레임워크다.

- 자료구조를 구현하는 데 사용되는 클래스와 인터페이스를 묶어놓은 것이다.

- 즉, 자료구조 생성(= 클래스) 및 데이터 조작에 필요한 다양한 기능(= 인터페이스, 메서드)을 제공한다. 

 

- 그렇다면 Java Collections Framework는 어떤 클래스 또는 인터페이스로 구성되어 있을까?

 

 

c) Java Collections Framework의 구조 

- Java Collections Framework의 구조는 다음과 같다.

 

- Iterable과 Collection 인터페이스로부터 다양한 인터페이스와 클래스가 구조를 이룬다.

- 이 구조 자체가 Java Collections Framework다. 

- 참고로 Map은 Java Collections Framework에 포함되지 않는다.

 

 

d) Map은 Collection이 아니다.

- Map은 Collection(= 집합)이 아니다. (Oracle의 공식 답변)

- 위의 그림에서 볼 수 있듯이, Map 인터페이스는 독립적으로 떨어져 있다.

- 그러므로 Map은 Java Collections Framework에 포함되지 않는다. 

- 여기에는 다양한 이유가 있다.

 

 

e) Map이 Collection이 아닌 이유(1) - Collection 인터페이스 비상속

- Java Collections Framework에 포함되기 위해서는 Collection 인터페이스를 상속받아야 한다.

- 상위 클래스 또는 상위 인터페이스로부터 Collection 인터페이스를 상속받아야 한다.

- 그러나 Map은 상위 개념으로부터 Collection 인터페이스를 상속받지 않는다.

 

 

f) Map이 Collection이 아닌 이유(2) - 복수 data 처리

- Collection을 상속받는 자료구조는 단일 데이터를 처리한다.

- 그러나 Map 자료구조는 Key와 Value라는 복수 데이터를 처리하는 자료구조다.

 

 

g) Map이 Collection이 아닌 이유(3) - Iterator 사용 불가

- Collection을 상속받는 자료구조는 모두 반복자를 사용할 수 있다.

- 그러나 Map 자료구조는 복수 데이터를 처리하므로 반복자를 사용할 수 없다.

- 반복자의 사용 기준이 Key인지, Value인지 상황에 따라서 달라지기 때문이다. 

 

 

h) Map이 Collection이 아닌 이유(4) - 상속 무의미

- Map은 Collection을 상속받는 자료구조와는 상반되는 특성을 가진다.

- 인터페이스를 상속받는다는 것은 공통된 속성을 묶는다는 것이다. 

- 그러한 의미에서 Map은 Collection과 Iterable과의 공통점이 존재하지 않는다. 

 

'Back-end > Java 개념' 카테고리의 다른 글

자바에서 람다를 사용하는 방법  (0) 2023.06.26
Optional이 뭔데? 왜 쓰는데?  (0) 2023.06.23
Unreachable Statement 오류  (0) 2022.05.10
Java의 기본 자료형(Primitive)  (0) 2022.01.28
변수와 리터럴에 대하여  (0) 2022.01.27

댓글