[자료구조] Java Collection Framework - 2

Dev웅·2023년 9월 30일

Java 자료구조

목록 보기
2/2

Java Collections 상속도

Collection Framework 계층도

Collection Framewokr란?
컬렉션 프레임워크란, 데이터 집합을 저장하는 클래스들을 표준화한 설계를 말한다. 쉽게 말하면 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
자바에서는 다음과 같이 인터페이스를 통해 공통된 행위를 가지는 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고, 관리할 수 있는 기능을 제공한다.

컬렉션 프레임웍에서는 컬렉션(데이터 그룹)을 크게 3가지 타입이 존재한다고 인식하고 갈 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. 바로 List, Set, Map이다. 그리고 List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가로 정의했다.

  • List - 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.

    <List 인터페이스에 선언된 주요 메서드>
    리스트 인터페이스

  • Set - 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.

    <Set 인터페이스에 선언된 주요 메서드>
    셋 인터페이스

  • Map - 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합. 키는 중복을 허용하지 않고, 값은 중복을 허용.

<Map 인터페이스에 선언된 주요 메서드>
맵 인터페이스

자바는 클래스의 공통된 부분을 뽑아 추상화된 형태인 인터페이스로 정의하고 이를 클래스가 상속하게 하였다. 이렇게 했을 때의 장점은 정말 많다. 그 중 하나는 일관된 메소드 사용법이다. 인터페이스에 선언된 메소드들이 하위클래스에 반드시 존재하며 자료구조에 따라 적절히 구현이 되어있다.

Collection, List, Set, LinkedList의 벤 다이어그램

벤 다이어그램

다음과 같이 Collection, List, Set 인터페이스들과 LinkedList 클래스를 벤 다이어그램으로 표현하면 다음과 같다. 만약 우리가 LinkedList를 배우고 싶다면 우리는 Collection에 어떤 메소드들이 있는지 먼저 학습하고 그 다음으로 List의 기능을 학습하면 LinkedList를 학습하지 않아도 벌써 LinkedList에 일부분을 익혔고 추가로 우리는 Collection을 학습했기 때문에 Set에 대해서도 어느정도 알게되었다! (그리고 그 Set을 상속한 구현체에 대해서도 어느정도 알게되었다.) 우리는 LinkedList만 좀 배워보려 했는데 Collection과 List 인터페이스를 상속한 구현클래스까지 사용법을 어느정도 터득한 것이다. 이렇게 일관된 명칭으로 메소드를 쓸 수 있게 해줌으로써 사용법을 익히기가 편리해진다. 실제로 위의 List와 Set의 메소드는 add(), remove(), contains(), size() 등 메소드 명이 같다. Collection 인터페이스가 이를 모두 구현했기 때문이다.

객체생성방법

또 하나의 장점으로는 객체생성시에 다형성을 활용해 프로그램을 유연하게 만들 수 있다는 것이다. 만약 LinkedList 객체를 생성하려면 어떻게 해야할까? 위의 상속도를 참고했을 때 다음과 같은 방법으로 생성할 수 있다.

//방법1.	
LinkedList<T> list = new LinkedList<>();

//방법2.
List<T> list = new LinkedList<>();

보통 일반적인 객체생성 방식은 방법1과 같은데 다형성을 이용하면 방법2와 같이 객체를 생성할 수 있다. 만약 LinkedList를 쓰다가 ArrayList로 객체를 생성하고 싶다면 다음과 같이 코드를 바꿀 것이다.

//방법1.
LinkedList<T> list = new ArrayList<>();

//방법2.
List<T> list = new ArrayList<>();

그러나 방법1은 컴파일 에러가 날 것이고 방법2의 경우에는 정상적으로 작동한다. 이는 매우 간단한 예시이며 실제로 객체를 담고 주고받는 과정에서 다형성을 이용한 방법2의 경우에는 프로그램을 매우 유연하게 만들어준다.

Collection Framework 장점

1. 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 사용법을 익히기에도 편리하고 재사용성이 높다.

2. 데이터 구조 및 알고리즘의 고성능 구현을 제공하여 프로그램의 성능과 품질을 향상시킨다.

3. 이미 구현되어있는 API를 사용하면 되기에, 새로운 API를 익히고 설계하는 시간이 줄어든다.

4. 소프트웨어 재사용을 촉진한다. 만일 자바에서 지원하지 않는 새로운 자료구조가 필요하다면, 컬렉션들을 활용하고 조합하여 새로운 알고리즘을 만들어낼 수 있다.

즉, Java의 Collection Framework는 객체지향프로그래밍(OOP)의 특징과 장점을 잘 활용하여 표준화된 형태로 자료구조를 제공하고 있다.

추가로 OOP의 특징을 잘 설명한 글이 있어 남겨두고 싶다.
객체지향프로그래밍의 특징 설명글 - 코드스테이츠

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

profile
Better late than never

0개의 댓글