자바 컬렉션 프레임워크 | 자바 입문강좌 41

자바 컬렉션 프레임워크

컬렉션 프레임워크(Collection Framework)라는 이름에 너무 쫄 필요는 없습니다. 컨테이너(container) 자료구조 (data structure) 등 어려운 용어가 난무하지만 막상 알고나면 별 내용이 없습니다.

물론 별 내용이 없어도 설명을 정성스럽게 하다보면 말이 길어지겠죠. 추상적인 데이터 아이디어를 다루다보면 길어지기도 합니다.

컬렉션 프레임워크란?

추상 데이터 타입

쉽게 말하면 자바에서 사용하는 자료구조입니다.

자바와 JDK를 사용해서 프로그래머 본인이 스스로 자료구조를 만들 수는 있습니다. 그런데 C로 자료구조를 구현해 보면 알지만 보통 쉬운 일은 아닙니다. 어찌어찌 자료구조를 만드는 것 까지는 가능하지만 그 알고리즘의 속도와 안정성에 있어서 자바 개발자들이 만들어놓은 컬렉션 프레임워크보다 떨어집니다.

실제 프로 개발자들이 도전을 해본 결과 개인이 개발한 알고리즘이 컬렉션 프레임워크보다 빠르고 효율적이지 못했다고 합니다. 자바 개발진들이 수십년에 걸쳐 JVM에 최적화시켜 개량해왔기 때문에 당연한 결과입니다.

애초에 특수한 프로그램의 속도를 향상시키기 위한 것이 목적이라면 자바를 사용하지 않았을 것입니다. 속도적인 부분은 C++ 을 사용합니다. 자바나 파이썬 등 다른 언어에서도 속도가 중요한 로직은 C 계열로 작성하고 포팅합니다.

컬렉션 프레임워크는 Collection 인터페이스에서 부터 시작하는데 계층도부터 보면 꽤나 복잡합니다.

아키텍쳐에 대한 부분에 대해 깊은 이해를 하기 위해서는 이 포스팅 아래의 외부참고자료들을 읽어보는 것을 추천합니다. 다들 영문 구글 상위 문서들입니다. 설명이 거의 비슷해 보이지만 약간씩은 관점의 차이가 있습니다. 이렇게 같은 것을 만들어도 관점의 차이가 생기는 이유는 컬렉션 프레임워크가 Abstract data type (추상화 데이터 타입)이기 때문입니다.

구체적인 것에 대하여 이야기하는 것은 쉽습니다. 적어도 보이는 것에 대한 의견 차이는 줄어들 테니까요. 허나 이처럼 추상적인 세계(자바 객체지향 프로그래밍의 세계 자체가 추상적이다)에서 사람마다 느끼는 것에 차이가 있습니다. 그래도 공통된 부분이 많기에 묶어놓은 개념이지만 그래도 사람마다 조금씩 각도의 차이가 있습니다.

아니 추상적인 사물에 대한 설명에 모두가 똑같은 설명을 한다면 그것이야 말로 기괴한 일 입니다. 추상성은 여러가지의 특징을 묶어놓은 것이기 때문에 거꾸로 여러가지 다양한 구체성이 보이는 것은 이상한 일이 아닙니다.

주요 클래스

컬렉션 자체는 인터페이스에서 시작하기 때문에 이를 이용하여 사용자 정의 컬렉션 클래스를 만들 수도 있습니다만, 일반적으로 유명한 자료형을 사용하는 것이 안전하겠죠?

컬렉션스 자료구조에는 리스트 인터페이스를 구현한 ArrayList, LinkedList, Vector 등이 있고, Set을 구현한 HashSet TreeSet 이 있습니다. Map은 키와 값의 쌍으로 관리하는 자료구조입니다. key-value 자료구조는 블록체인이 뜨면서 요새 더욱 중요해지고 있습니다.

요약

자바 컬렉션 프레임워크는 복잡한 측면이 있습니다. 수학적인 사고도 어느정도 필요하고요.

항상 설명하지만 단번에 모든 것을 이해하기란 쉽지 않습니다. 또 자바 프로그래밍 언어 하나만으로 모든 것을 이해하는 일도 어렵습니다.

하나씩 실습하면서 익히다보면 자료구조간에 연관성이 보이는 날이 오고 자료구조 전체를 이해하는 날이 올 것 입니다.

이 포스팅은 예제 하나 없이 그냥 넘어갑니다.

외부참고자료

Collections in Java – javatpoint

Lesson: Introduction to Collections (The Java™ Tutorials > Collections) (oracle.com)

Java – Collections Framework – Tutorialspoint

Java Collections Framework Tutorials (beginnersbook.com)

Java Collection Tutorial – GeeksforGeeks

Leave a Comment