안녕하세요 워누입니다!

최근에 회사에서 후임들과 소스리뷰를 진행하는데 확실히 Java를 야매(?)로 공부하다보니, 대략적으로 이 함수가 어떤 용도인지만 알고 있었을 뿐, 저 역시도 원론적인 개념이나 어떻게 사용하는지 방법 등을 정확하게 알지 못함을 다시 한번 깨닫게 되더군요.. 항상 검색하면서 공부하고 개발하다 보니 정리가 안된 것들이 많은 것 같습니다. 그래서 이번 포스팅과 다음 포스팅은 제가 개발하면서, 그리고 남이 개발한 걸 보면서 헷갈렸던 개념인 컬렉션 프레임워크(collection framework)에 대하여 작성해보도록 하겠습니다! 

.

일단 컬렉션 프레임워크(collection framework)를 정의하려면, 컬렉션(collection)과 프레임워크(framework)를 나누어서 살펴보아야 합니다. 

 

컬렉션(Collection) : 요소를 수집해서 저장하는 것을 말하며, 자바 컬렉션은 객체를 수집해서 저장하는 역할.

프레임워크(Framework) : 사용 방법을 미리 정해 놓은 라이브러리를 말함 (자주 쓰이는 말이니 꼭 알아두시길!)

 

컬렉션과 프레임워크를 정의하고 보니 컬렉션 프레임워크는 아래와 같이 정의할 수 있겠군요!

 

컬렉션 프레임워크(collection framework) : 객체를 수집해서 저장하는 역할에 대한 사용 방법이 미리 정의된 라이브러리

 

보통 저를 포함해서 초급 개발자들이 주로 하는 실수들은 객체를 저장해두고, 필요할 때 꺼내쓸 때 주로 배열을 쓰는 경우가 많습니다! 배열이 아무래도 쉽게 생성하고 사용할 수 있지만, 아무래도 저장할 수 있는 객체 수가 지정되어 있다 보니, 불특정 다수의 객체를 저장하기에는 문제가 있죠. 

(배열의 길이를 무작정 크게 생성하는 방법도 있지만 이 역시 불필요한 공간을 만들어버리는 거니까 좋은 방법이 될 수 없습니다.)

또 배열을 사용하다가 중간에 객체를 삭제하게 되면 해당 index가 비워지는데 이후에 새 객체를 만들어 저장하려면, 어디가 비어있는지 확인하는 코드를 또 만들어야 해요. 

-> 쉽게 말하면 공간 문제와 삭제 후 생성 같은 문제가 너무 커서 "배열은 비효율적이다." 라고 보시면 됩니다. 

 

이걸 해결하려고 자바는 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색(객체 수집, 저장을 포함한 역할)할 수 있도록 java.util 패키지에 인터페이스와 클래스들을 포함(라이브러리를 미리 정의해 놓음)시켜 놓았는데 이것들이 바로 컬렉션 프레임워크들입니다! 

 

글이 너무 길지만 한번 읽고 사용하면 이해가 훨씬 빠를거에요! (저도 찾아보면서 개념을 이해했습니다..3년간 뭐했니..)

 

컬렉션 프레임워크에서 사용하는 주요 인터페이스(interface)는 List, Set, Map 세가지가 있습니다.

 

이 중에서 List와 Set 인터페이스는 모두 컬렉션(Collection) 인터페이스를 상속받기 때문에 List와 Set의 공통된 부분은 컬렉션 인터페이스에서 정의하고 있는데, Map 인터페이스는 키(key)와 값(value)을 쌍으로 묶어서 관리하는 구조라서 List와 Set과는 사용방법이 완전히 다릅니다. 

 

이 인터페이스들의 특징들을 아래 표로 정리하고 구조도를 그려보았습니다.

.

인터페이스 분류 특징 구현 클래스
Collection List<E> - 순서를 유지하고 저장
- 중복 저장 가능
ArrayList, Vector, LinkedList
Set<E> - 순서를 유지하지 않고 저장
- 중복 저장 불가
HashSet, TreeSet
Map <K,V> - 키와 값이 한 쌍이 되어 저장
- 키는 중복 저장 불가
HashMap, Hashtable,
TreeMap, Properties

.

 

 

Collection Framework Diagram

.

표와 구조도에 작성된 구현 클래스들은 각 인터페이스에서 제공해주는 클래스들입니다. 인터페이스를 사용한다면 그 안에 미리 구현되어 있는 클래스들을 가져와서 사용할 수 있다는 것인데요, 이는 프레임워크를 자주 사용하다 보면 익숙해질 겁니다 ㅎㅎ 

.

오늘은 컬렉션 프레임워크에 대한 개념과 특징들을 이렇게 정리해 보았는데요! 역시 야매로 알고 있는 것보다는 직접 정리하면서 찾아보는 것이 개발할 때 많이 도움이 되는 것 같습니다 ㅎㅎ 다음 포스팅에서는 예제 소스를 가져와서 어떻게 사용하는지 정리해보도록 하겠습니다! 

 

그럼 이만~~~~!

+ Recent posts