자바 컬렉션 및 제네릭 요약
이 포스트에서는 자바의 컬렉션과 제네릭 프로그래밍 개념을 소개하고, 관련된 주요 클래스와 인터페이스를 예제와 함께 설명합니다. 자바 컬렉션은 다양한 객체를 효과적으로 관리하기 위해 제공되는 도구입니다. 제네릭은 코드의 재사용성을 높이고, 타입 안정성을 보장합니다.
1. 컬렉션(Collection)
컬렉션은 여러 요소(객체)를 저장하고 관리하기 위한 컨테이너입니다. 배열과 달리 크기가 동적으로 조정되며, 다양한 종류의 객체를 삽입, 삭제, 검색하는 기능을 제공합니다.
주요 컬렉션 인터페이스:
- List
: 순서가 있는 컬렉션. - Set
: 중복을 허용하지 않는 컬렉션. - Queue
: FIFO(First In, First Out) 방식의 컬렉션. - Map<K, V>: 키와 값의 쌍으로 이루어진 컬렉션.
코드 예시:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println(list.get(0)); // apple
2. 제네릭(Generic)
제네릭은 클래스나 메소드가 특정 타입에 의존하지 않고 여러 타입을 지원할 수 있도록 일반화하는 기법입니다. 제네릭을 사용하면 코드의 재사용성과 타입 안전성을 높일 수 있습니다.
제네릭 스택 클래스 예시:
class Stack<E> {
private List<E> elements = new ArrayList<>();
public void push(E element) {
elements.add(element);
}
public E pop() {
if (elements.isEmpty()) return null;
return elements.remove(elements.size() - 1);
}
}
public class GenericStackExample {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("Python");
System.out.println(stack.pop()); // Python
}
}
3. Vector 클래스
Vector는 가변 크기의 배열을 구현한 클래스로, ArrayList와 유사하지만 스레드 안전(thread-safe)합니다. 요소를 삽입, 삭제할 때 자동으로 크기가 조절됩니다.
코드 예시:
import java.util.Vector;
public class VectorEx {
public static void main(String[] args) {
Vector<Integer> v = new Vector<>();
v.add(5);
v.add(10);
System.out.println(v.size()); // 2
System.out.println(v.get(0)); // 5
}
}
4. ArrayList 클래스
ArrayList는 Vector와 유사한 가변 크기 배열 클래스입니다. 스레드 동기화를 제공하지 않지만, 성능이 더 우수합니다.
코드 예시:
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<>();
a.add("Mike");
a.add("Jane");
System.out.println(a.get(0)); // Mike
}
}
5. HashMap<K, V> 클래스
HashMap은 키와 값의 쌍으로 이루어진 요소를 관리하는 컬렉션입니다. 빠른 검색, 삽입, 삭제를 제공하며, 키를 통해 값을 검색합니다.
코드 예시:
import java.util.HashMap;
public class HashMapEx {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("apple", "사과");
map.put("banana", "바나나");
System.out.println(map.get("apple")); // 사과
}
}
6. LinkedList 클래스
LinkedList는 이중 연결 리스트로, 요소를 양방향으로 연결해 관리합니다. 맨 앞이나 맨 뒤에 요소를 추가하거나 삭제하는 데 유리하며, 스택과 큐로도 사용할 수 있습니다.
코드 예시:
import java.util.LinkedList;
public class LinkedListEx {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
list.addFirst("Zeroth");
System.out.println(list.get(0)); // Zeroth
}
}
7. Iterator 인터페이스
Iterator는 컬렉션의 요소를 순차적으로 탐색하기 위한 인터페이스입니다. Iterator 객체를 사용하면 인덱스 없이 컬렉션의 모든 요소를 순회할 수 있습니다.
코드 예시:
import java.util.*;
public class IteratorEx {
public static void main(String[] args) {
Vector<Integer> v = new Vector<>();
v.add(10);
v.add(20);
v.add(30);
Iterator<Integer> it = v.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
8. Collections 클래스
Collections 클래스는 컬렉션에 대한 다양한 연산(정렬, 검색, 역순 배치 등)을 지원하는 유틸리티 클래스입니다.
코드 예시:
import java.util.*;
public class CollectionsEx {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
Collections.sort(list);
System.out.println(list); // [Apple, Banana, Cherry]
Collections.reverse(list);
System.out.println(list); // [Cherry, Banana, Apple]
}
}
이 포스트를 통해 자바의 컬렉션과 제네릭 프로그래밍에 대한 기본 개념과 활용 방법을 이해할 수 있습니다. 다양한 컬렉션 클래스와 제네릭을 활용하여 더 안전하고 재사용 가능한 코드를 작성할 수 있습니다. 각 예제 코드를 실행해보며 직접 개념을 적용해보는 것을 추천합니다.
'Java' 카테고리의 다른 글
명품자바 프로그래밍의 기초: 9장 (0) | 2024.09.02 |
---|---|
명품자바 프로그래밍의 기초: 8장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 6장 (0) | 2024.08.18 |
명품자바 프로그래밍의 기초: 5장 (0) | 2024.08.14 |
명품자바 프로그래밍의 기초: 4장 (0) | 2024.08.14 |