IMCAT.DEV
로그인 가입
Java 중급 자료구조

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}

    코드 한 줄씩 동작 설명

    1. ArrayList<String> fruits = new ArrayList<>(); - 문자열을 저장할 수 있는 ArrayList를 생성합니다.
    2. fruits.add("사과"); - 리스트에 "사과"를 추가합니다.
    3. System.out.println("과일 목록: " + fruits); - 현재 과일 목록을 출력합니다.
    4. HashSet<String> colors = new HashSet<>(); - 중복을 허용하지 않는 HashSet을 생성합니다.
    5. colors.add("빨강"); - 빨강 색상을 추가합니다.
    6. System.out.println("색상 목록: " + colors); - 색상 목록을 출력합니다.
    7. HashMap<String, String> phoneBook = new HashMap<>(); - 키-값 쌍을 저장할 수 있는 HashMap을 생성합니다.
    8. phoneBook.put("홍길동", "010-1234-5678"); - 이름과 전화번호를 추가합니다.
    9. System.out.println("전화번호부: " + phoneBook); - 전화번호부를 출력합니다.
    10. 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 발생
    11. 올바른 코드:
    12. if (list.size() > 1) {
          String item = list.get(1);
      }

      2. Set에 중복 데이터 추가

      HashSet<String> set = new HashSet<>();
      set.add("apple");
      set.add("apple"); // 중복 추가로 무시됨
    13. 올바른 코드: 중복 체크 필요 없음, Set은 자동으로 중복을 제거합니다.
    14. 3. Map에서 키로 값 접근 시 존재 여부 체크

      HashMap<String, String> map = new HashMap<>();
      String number = map.get("홍길동"); // null 반환
    15. 올바른 코드:
    16. if (map.containsKey("홍길동")) {
          String number = map.get("홍길동");
      }

      6. 정리

    17. Java Collections Framework는 데이터를 효율적으로 관리하는 데 필수적인 도구입니다.
    18. List, Set, Map의 기본 개념과 실생활 비유로 이해도를 높였습니다.
    19. 실전에서 자주 사용되는 예제를 통해 실제 활용법을 익혔습니다.
    20. Collections 사용 시 흔히 발생하는 실수와 주의사항을 정리했습니다.
    21. 다음에 학습하면 좋은 주제

    22. Java Streams: 데이터 처리의 새로운 패러다임
    23. Generics: 타입 안전성을 높이는 방법
    24. Java Concurrency: 멀티스레딩과 동시성 제어