일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPQL
- 데이터내보내기
- 컬렉션프레임워크
- JPA
- pat발급
- datagrip
- docker
- 르세라핌
- ANTIFRAGILE
- analytics4
- 명령어
- 티스토리챌린지
- bigquery
- git pat
- 애널리틱스4
- Python
- DBMS
- codeium
- ci/cd
- git branch 삭제
- 오블완
- 11월순위
- IntelliJ
- docker 명령어
- java
- db종류
- gtihub
- spring
- 도커이미지
- Today
- Total
hanker
JAVA - JAVA에서 컬렉션 프레임워크란 무엇일까? 본문
이번 글에서는 Java에서 컬렉션 프레임워크가 무엇인지에 대해서 알아보자.
JAVA의 컬렉션 프레임워크(Collection Framework)란?
컬렉션 프레임워크는 자바에서 데이터를 효율적으로 저장하고 관리하기 위해 제공하는 데이터 구조와 알고리즘의 표준화된 아키텍처이다. 주로 여러 개의 데이터를 효과적으로 처리하기 위해 사용되며, 데이터 추가, 삭제, 검색, 정렬 등의 작업을 용이하게 수행할 수 있도록 설계되어 있다.
1. 컬렉션 프레임워크 구조
java.util
├── Collection
│ ├── List
│ │ ├── ArrayList
│ │ ├── LinkedList
│ │ └── Vector
│ ├── Set
│ │ ├── HashSet
│ │ ├── LinkedHashSet
│ │ └── TreeSet
│ └── Queue
│ ├── PriorityQueue
│ └── Deque
└── Map
├── HashMap
├── LinkedHashMap
├── TreeMap
└── Hashtable
2. 주요 인터페이스와 클래스
컬렉션 프레임워크는 다음과 같은 주요 인터페이스와 이를 구현하는 클래스들로 구성된다.
2.1 인터페이스
- Collection 인터페이스 (모든 컬렉션의 상위 인터페이스)
- List: 순서가 있는 데이터 저장 (중복 허용)
- 예: ArrayList, LinkedList, Vector
- Set: 순서가 없고 중복을 허용하지 않는 데이터 저장
- 예: HashSet, LinkedHashSet, TreeSet
- Queue: FIFO(First-In-First-Out) 구조를 따르는 데이터 저장
- 예: PriorityQueue, Deque
- List: 순서가 있는 데이터 저장 (중복 허용)
- Map 인터페이스 (키-값 쌍으로 데이터를 저장)
- 예: HashMap, LinkedHashMap, TreeMap, Hashtable
2.2 클래스
- ArrayList: 크기가 동적으로 변경되는 배열
- HashSet: 중복을 허용하지 않고, 순서를 보장하지 않는 집합
- HashMap: 키-값 쌍으로 저장하며, 키의 중복을 허용하지 않음
3. 주요 특징
각각의 특징을 코드를 보면서 알아보자
데이터 저장 및 조작: 데이터를 저장하고 조작하는 데 필요한 인터페이스, 클래스 및 메서드를 포함한다.
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("가");
list.add("나");
list.add("다");
list.add("라");
System.out.println("리스트: " + list);
list.remove("나");
System.out.println("리스트: " + list);
}
재사용 가능: 표준화된 구조로 코드 재사용성을 높인다.
// 공통 메서드: Map 인터페이스를 기반으로 동작
public static void printMap(Map<Integer, String> map) {
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
public static void main(String[] args) {
// HashMap 사용
Map<Integer, String> hashMap = new HashMap<>();
hashMap.put(1, "가");
hashMap.put(2, "나");
System.out.println("HashMap:");
printMap(hashMap);
// TreeMap 사용
Map<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "다");
treeMap.put(4, "라");
System.out.println("\nTreeMap:");
printMap(treeMap);
}
printMap 메서드는 Map 인터페이스를 사용하여 HashMap, TreeMap 등 다양한 맵 타입에서 동일하게 동작한다.
다양한 구현: 다양한 데이터 구조(리스트, 집합, 맵 등)를 필요에 따라 선택하여 사용할 수 있다.
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("ArrayList");
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("LinkedList");
System.out.println(arrayList);
System.out.println(linkedList);
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3); // 중복 데이터는 저장되지 않음
System.out.println("Set: " + numbers);
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "가");
map.put(2, "나");
System.out.println("Map: " + map);
}
제네릭(Generic) 지원: 타입 안정성을 제공하여 컴파일 시 타입 검사를 강화한다.
public static void main(String[] args) {
// 제네릭 사용: String 타입의 데이터만 저장 가능
ArrayList<String> names = new ArrayList<>();
names.add("hanker");
names.add("eddy");
// 컴파일 시 타입 안정성 제공
// names.add(123); // 컴파일 에러 발생
for (String name : names) {
System.out.println(name);
}
}
4. 컬렉션 프레임워크의 장점
위 특징에서와 같이 데이터 구조 구현 / 코드 간결성 / 재사용 / 제네릭을 통한 안정성 등이 장점으로 꼽힌다.
5. 참고사항
- 멀티스레드 환경에서는 Collections.synchronizedList 또는 ConcurrentHashMap 같은 스레드 안전 컬렉션을 사용해야 한다.
- 성능 요구사항에 따라 적절한 데이터 구조를 선택하는 것이 중요하다.
컬렉션 프레임워크는 자바 개발에서 필수적으로 사용되는 부분이므로, 다양한 데이터 구조와 사용 방법을 숙지하는 것이 중요하다.
'JAVA' 카테고리의 다른 글
JAVA - JAVA에서 메서드 오버로딩과 오버라이딩의 차이점은 무엇일까? (0) | 2024.11.27 |
---|---|
Java - 문자열 내 Tab 문자 지우기 (0) | 2024.11.25 |
JAVA - JAVA에서 인터페이스와 추상 클래스의 차이점은 무엇일까? (0) | 2024.11.25 |
JAVA - JDK, JRE, JVM의 차이점은 무엇일까? (0) | 2024.11.24 |
JAVA - 자바의 주요 특징은 무엇일까? (0) | 2024.11.23 |