학습
Java Java Collections 심화
Java Java Collections 심화 — 중급
Java Collections 심화
1. 도입 (왜 배워야 하는가)
Java Collections Framework는 Java 프로그래밍 언어에서 데이터를 효율적으로 저장하고 관리하는 데 필수적인 도구입니다. 실무에서는 데이터의 집합을 다루는 일이 빈번하게 발생하는데, Collections을 사용하지 않으면 배열과 같은 단순한 데이터 구조로 모든 작업을 처리해야 합니다. 이 경우 데이터의 추가, 삭제, 정렬, 탐색 등의 작업이 비효율적이고 복잡해질 수 있습니다.
예를 들어, 쇼핑몰의 장바구니를 구현할 때, 사용자가 상품을 추가하거나 삭제하는 기능이 필요합니다. Collections을 사용하지 않으면 이러한 작업을 구현하기가 복잡해지고 성능 저하를 초래할 수 있습니다. Collections은 이러한 문제를 해결하고 효율적인 데이터 관리를 가능하게 합니다.
2. 핵심 개념 설명
Java Collections Framework는 다양한 데이터 구조를 제공하며, 그 중에서도 List, Set, Map이 가장 많이 사용됩니다. 각 개념을 간단히 정의하고 실생활 비유를 통해 설명하겠습니다.
| 용어 | 설명 |
|---|---|
| List | 순서가 있는 데이터의 집합. 예를 들어, 학생의 성적 목록. |
| Set | 중복을 허용하지 않는 데이터 집합. 예를 들어, 고유한 색상의 스프레이 캔. |
| Map | 키-값 쌍으로 구성된 데이터의 집합. 예를 들어, 전화번호부의 이름과 전화번호. |
- List는 마치 학생의 성적표처럼, 순서가 중요한 경우에 사용합니다. 성적이 추가되면 마지막에 추가되며, 인덱스를 통해 쉽게 접근할 수 있습니다.
- Set은 중복을 허용하지 않으므로, 예를 들어 친구들의 고유한 취미를 기록할 때 유용합니다.
- Map은 키를 통해 값을 검색할 수 있어, 전화번호부처럼 이름을 통해 전화번호를 빠르게 찾을 수 있습니다.
3. 기본 코드 예제
다양한 Collections의 기본 사용법을 보여주는 코드입니다.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashMap;
public class CollectionsExample {
public static void main(String[] args) {
// List 예제
ArrayList<String> fruits = new ArrayList<>();
fruits.add("사과");
fruits.add("바나나");
fruits.add("오렌지");
System.out.println("과일 목록: " + fruits); // 과일 목록: [사과, 바나나, 오렌지]
// Set 예제
HashSet<String> colors = new HashSet<>();
colors.add("빨강");
colors.add("파랑");
colors.add("빨강"); // 중복 추가
System.out.println("색상 목록: " + colors); // 색상 목록: [파랑, 빨강]
// Map 예제
HashMap<String, String> phoneBook = new HashMap<>();
phoneBook.put("홍길동", "010-1234-5678");
phoneBook.put("이순신", "010-9876-5432");
System.out.println("전화번호부: " + phoneBook); // 전화번호부: {홍길동=010-1234-5678, 이순신=010-9876-5432}
}
}
실행 결과
과일 목록: [사과, 바나나, 오렌지]
색상 목록: [파랑, 빨강]
전화번호부: {홍길동=010-1234-5678, 이순신=010-9876-5432}
코드 한 줄씩 동작 설명
ArrayList<String> fruits = new ArrayList<>();- 문자열을 저장할 수 있는 ArrayList를 생성합니다.fruits.add("사과");- 리스트에 "사과"를 추가합니다.System.out.println("과일 목록: " + fruits);- 현재 과일 목록을 출력합니다.HashSet<String> colors = new HashSet<>();- 중복을 허용하지 않는 HashSet을 생성합니다.colors.add("빨강");- 빨강 색상을 추가합니다.System.out.println("색상 목록: " + colors);- 색상 목록을 출력합니다.HashMap<String, String> phoneBook = new HashMap<>();- 키-값 쌍을 저장할 수 있는 HashMap을 생성합니다.phoneBook.put("홍길동", "010-1234-5678");- 이름과 전화번호를 추가합니다.System.out.println("전화번호부: " + phoneBook);- 전화번호부를 출력합니다.- 올바른 코드:
- 올바른 코드: 중복 체크 필요 없음, Set은 자동으로 중복을 제거합니다.
- 올바른 코드:
- Java Collections Framework는 데이터를 효율적으로 관리하는 데 필수적인 도구입니다.
- List, Set, Map의 기본 개념과 실생활 비유로 이해도를 높였습니다.
- 실전에서 자주 사용되는 예제를 통해 실제 활용법을 익혔습니다.
- Collections 사용 시 흔히 발생하는 실수와 주의사항을 정리했습니다.
- Java Streams: 데이터 처리의 새로운 패러다임
- Generics: 타입 안전성을 높이는 방법
- Java Concurrency: 멀티스레딩과 동시성 제어
4. 실전 활용 예제
1. 쇼핑몰 장바구니 구현
쇼핑몰에서 사용자가 장바구니에 상품을 추가하거나 삭제하는 기능을 구현할 때 List를 사용할 수 있습니다.
import java.util.ArrayList;
public class ShoppingCart {
private ArrayList<String> cart;
public ShoppingCart() {
cart = new ArrayList<>();
}
public void addItem(String item) {
cart.add(item);
}
public void removeItem(String item) {
cart.remove(item);
}
public void displayCart() {
System.out.println("장바구니: " + cart);
}
public static void main(String[] args) {
ShoppingCart myCart = new ShoppingCart();
myCart.addItem("티셔츠");
myCart.addItem("바지");
myCart.displayCart(); // 장바구니: [티셔츠, 바지]
myCart.removeItem("티셔츠");
myCart.displayCart(); // 장바구니: [바지]
}
}
2. 고유한 사용자 ID 관리
Set을 사용하여 중복되지 않는 사용자 ID를 관리할 수 있습니다.
import java.util.HashSet;
public class UniqueUserIDs {
private HashSet<String> userIDs;
public UniqueUserIDs() {
userIDs = new HashSet<>();
}
public void addUser(String userID) {
if (userIDs.add(userID)) {
System.out.println(userID + "가 추가되었습니다.");
} else {
System.out.println(userID + "는 이미 존재하는 ID입니다.");
}
}
public static void main(String[] args) {
UniqueUserIDs uniqueIDs = new UniqueUserIDs();
uniqueIDs.addUser("user1"); // user1가 추가되었습니다.
uniqueIDs.addUser("user1"); // user1는 이미 존재하는 ID입니다.
}
}
5. 흔한 실수와 주의사항
1. List의 인덱스 범위 초과
ArrayList<String> list = new ArrayList<>();
list.add("A");
String item = list.get(1); // IndexOutOfBoundsException 발생
if (list.size() > 1) {
String item = list.get(1);
}
2. Set에 중복 데이터 추가
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("apple"); // 중복 추가로 무시됨
3. Map에서 키로 값 접근 시 존재 여부 체크
HashMap<String, String> map = new HashMap<>();
String number = map.get("홍길동"); // null 반환
if (map.containsKey("홍길동")) {
String number = map.get("홍길동");
}