개발/자바

컬렉션 사용의 필요성

피터JK 2025. 2. 20. 11:01
728x90

컬렉션 사용의 필요성과 다양한 예제

자바에서 Collection 프레임워크를 사용하는 이유와 함께, List, Set, Map 등의 다양한 예제를 소개하겠습니다.


🔹 1. 컬렉션을 사용하는 이유

  1. 배열의 한계를 극복
    • 배열은 크기가 고정되어 있으며, 크기를 변경하려면 새로운 배열을 만들어야 함.
    • 컬렉션은 동적으로 크기가 조정됨.
  2. 데이터 구조 관리가 용이
    • List, Set, Map 등 다양한 데이터 구조를 쉽게 구현 가능.
  3. 내장 메서드를 통한 편리한 데이터 처리
    • 요소 추가, 삭제, 탐색 등을 손쉽게 수행.

🔹 2. List (순서가 있는 자료구조, 중복 허용)

📌 ArrayList 사용 예제

import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        // 요소 추가
        list.add("Java");
        list.add("Python");
        list.add("JavaScript");
        
        // 요소 가져오기
        System.out.println("첫 번째 요소: " + list.get(0)); // Java
        
        // 반복문 활용
        for (String lang : list) {
            System.out.println("언어: " + lang);
        }
        
        // 크기 확인
        System.out.println("리스트 크기: " + list.size());
        
        // 요소 삭제
        list.remove("Python");
        System.out.println("Python 삭제 후 리스트: " + list);
    }
}

특징: 순서 유지, 중복 허용.


🔹 3. Set (순서가 없고 중복을 허용하지 않는 자료구조)

📌 HashSet 사용 예제

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        
        // 요소 추가
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple"); // 중복 추가 (무시됨)
        
        // 출력
        System.out.println("Set 요소: " + set);
        
        // 포함 여부 확인
        System.out.println("Apple 포함 여부: " + set.contains("Apple"));
        
        // 반복문 사용
        for (String fruit : set) {
            System.out.println("과일: " + fruit);
        }
        
        // 요소 삭제
        set.remove("Banana");
        System.out.println("Banana 삭제 후 Set: " + set);
    }
}

특징: 중복 제거 기능, 순서 보장 X (LinkedHashSet 사용 시 순서 유지).


🔹 4. Map (키-값 쌍으로 데이터를 저장)

📌 HashMap 사용 예제

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        
        // 요소 추가
        map.put(1, "사과");
        map.put(2, "바나나");
        map.put(3, "체리");
        
        // 값 가져오기
        System.out.println("Key 1의 값: " + map.get(1));
        
        // 모든 키-값 출력
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        
        // 키 포함 여부 확인
        System.out.println("Key 2 존재 여부: " + map.containsKey(2));
        
        // 요소 삭제
        map.remove(2);
        System.out.println("Key 2 삭제 후: " + map);
    }
}

특징: 키를 기준으로 값에 접근, 중복 키 허용 X.


🔹 5. 컬렉션 활용 예제

📌 학생 목록 관리 (List 활용)

import java.util.ArrayList;
import java.util.List;

class Student {
    String name;
    int age;

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class StudentListExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        
        // 학생 추가
        students.add(new Student("홍길동", 20));
        students.add(new Student("김철수", 22));
        students.add(new Student("이영희", 21));
        
        // 학생 목록 출력
        for (Student s : students) {
            System.out.println("이름: " + s.name + ", 나이: " + s.age);
        }
    }
}

활용 예시: 학생 목록을 관리할 때 List 활용.


📌 상품 재고 관리 (Map 활용)

import java.util.HashMap;
import java.util.Map;

public class InventorySystem {
    public static void main(String[] args) {
        Map<String, Integer> inventory = new HashMap<>();
        
        // 재고 추가
        inventory.put("Laptop", 5);
        inventory.put("Mouse", 10);
        inventory.put("Keyboard", 8);
        
        // 특정 상품의 재고 확인
        System.out.println("Laptop 재고: " + inventory.get("Laptop"));
        
        // 전체 재고 목록 출력
        for (Map.Entry<String, Integer> entry : inventory.entrySet()) {
            System.out.println("상품: " + entry.getKey() + ", 수량: " + entry.getValue());
        }
        
        // 재고 감소
        inventory.put("Mouse", inventory.get("Mouse") - 2);
        System.out.println("Mouse 판매 후 재고: " + inventory.get("Mouse"));
    }
}

활용 예시: 상품별 재고 관리.


🔹 6. 컬렉션 정렬 (Comparator 사용)

📌 학생 목록을 나이순으로 정렬

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student {
    String name;
    int age;

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class StudentSortExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("홍길동", 20));
        students.add(new Student("김철수", 22));
        students.add(new Student("이영희", 21));

        // 나이순 정렬
        Collections.sort(students, Comparator.comparingInt(s -> s.age));

        // 정렬된 목록 출력
        for (Student s : students) {
            System.out.println("이름: " + s.name + ", 나이: " + s.age);
        }
    }
}

활용 예시: 데이터 정렬이 필요한 경우.


🔹 7. 결론

  • List → 순서가 있는 데이터 저장 (ex: 학생 목록)
  • Set → 중복을 허용하지 않는 데이터 저장 (ex: 중복 없는 태그 목록)
  • Map → 키-값 형태로 저장 (ex: 상품 재고 관리)
  • 컬렉션을 활용하면 다양한 데이터 구조를 쉽게 구현하고 관리 가능! 
728x90