자바 중급 문법 – 컬렉션 프레임워크 – 2 – Map 인터페이스와 구현 클래스 (HashMap, TreeMap 등)

자바 중급 문법 - 컬렉션 프레임워크 - 2 - Map 인터페이스와 구현 클래스 (HashMap, TreeMap 등)
자바 중급 문법 – 컬렉션 프레임워크 – 2 – Map 인터페이스와 구현 클래스 (HashMap, TreeMap 등)

자바 중급 문법 – 컬렉션 프레임워크 – 2 – Map 인터페이스와 구현 클래스 (HashMap, TreeMap 등)

안녕하세요! 자바 중급 문법 시리즈 두 번째 포스트로 오신 것을 환영합니다. 이번에는 컬렉션 프레임워크의 중요한 인터페이스인 Map에 대해 알아보겠습니다. Map은 키(key)와 값(value)의 쌍을 저장하는 자료구조입니다. 여러 가지 구현 클래스 중에서는 HashMap과 TreeMap에 초점을 맞춰 알아보도록 하겠습니다.

Map 인터페이스란?

Map 인터페이스는 자바 컬렉션 프레임워크에서 키와 값의 쌍을 저장하는 자료구조를 표현하는 인터페이스입니다. 키는 중복될 수 없고, 값은 중복되어 저장될 수 있습니다. Map은 key를 통해 value를 검색하고, 키-값 쌍을 추가, 삭제, 수정하는 등 다양한 기능을 제공합니다.

Map은 Generic으로 선언되어 있어, 다양한 데이터 타입의 키와 값 쌍을 저장할 수 있습니다. 예를 들어, Map<String, Integer>는 String 타입의 키와 Integer 타입의 값으로 이루어진 쌍을 저장하는 Map을 의미합니다.

HashMap 클래스

HashMap은 Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용되는 구현 클래스입니다. HashMap은 키-값 쌍을 해시 함수를 통해 저장하고 검색하기 때문에 빠른 성능을 제공합니다. 이를 비유하자면, HashMap은 자동차 주행 시 가장 빠른 경로를 선택하는 GPS와 비슷합니다. 해시 함수를 사용하여 키를 해시코드로 변환하고, 이를 기반으로 효율적인 데이터 접근을 가능하게 합니다.

아래는 HashMap의 간단한 예시입니다.

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

public class HashMapExample {
    public static void main(String[] args) {
        // HashMap 생성
        Map<String, Integer> scores = new HashMap<>();

        // 키-값 쌍 추가
        scores.put("철수", 90);
        scores.put("영희", 85);
        scores.put("민수", 95);

        // 키를 통한 값 검색
        int score = scores.get("철수"); // 90
        System.out.println("철수의 점수: " + score);

        // 키-값 쌍 삭제
        scores.remove("영희");

        // 모든 키-값 쌍 순회
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            String name = entry.getKey();
            int value = entry.getValue();
            System.out.println(name + "의 점수: " + value);
        }
    }
}

HashMap의 사용법을 살펴보면, 먼저 HashMap<String, Integer>과 같이 키와 값의 타입을 명시하여 HashMap 객체를 생성합니다. 그 후 put() 메서드를 사용하여 키-값 쌍을 추가하고, get() 메서드를 통해 키를 통해 값을 검색할 수 있습니다. remove() 메서드를 사용하면 특정 키-값 쌍을 삭제할 수도 있습니다.

TreeMap 클래스

TreeMap은 Map 인터페이스를 구현한 클래스 중 하나로, 정렬된 순서를 유지하면서 키-값 쌍을 저장합니다. 이진 검색 트리(binary search tree)라는 자료구조를 기반으로 하며, 키를 기준으로 정렬하여 저장합니다. TreeMap은 키의 순서에 따라 값을 정렬하고자 할 때 유용하게 사용됩니다. 비유하자면, TreeMap은 이름순으로 정렬된 주소록과 같습니다.

아래는 TreeMap의 간단한 예시입니다.

import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        // TreeMap 생성
        Map<String, Integer> scores = new TreeMap<>();

        // 키-값 쌍 추가
        scores.put("철수", 90);
        scores.put("영희", 85);
        scores.put("민수", 95);

        // 키를 통한 값 검색
        int score = scores.get("철수"); // 90
        System.out.println("철수의 점수: " + score);

        // 키-값 쌍 삭제
        scores.remove("영희");

        // 모든 키-값 쌍 순회
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            String name = entry.getKey();
            int value = entry.getValue();
            System.out.println(name + "의 점수: " + value);
        }
    }
}

TreeMap의 사용법은 HashMap과 유사하며, 정렬된 순서를 유지한다는 점이 다릅니다. TreeMap을 사용할 때는 키의 정렬 순서를 고려하여 데이터를 저장하고 관리해야 합니다.

주의해야 할 점

  1. 중복된 키는 허용되지 않습니다: Map은 키를 통해 값을 검색하기 때문에 중복된 키를 사용하면 이전의 값을 덮어쓰게 됩니다.
  2. HashMap의 순서는 보장되지 않습니다: HashMap은 해시 함수를 사용하여 데이터를 저장하기 때문에 데이터의 순서가 보장되지 않습니다. 데이터를 순서대로 저장하고자 한다면 LinkedHashMap을 사용하거나, 데이터를 정렬한 후 사용해야 합니다.
  3. TreeMap의 키는 정렬 가능해야 합니다: TreeMap은 키를 기준으로 정렬하기 때문에 키의 클래스는 Comparable 인터페이스를 구현하거나, Comparator를 제공해야 합니다.

이상으로 Map 인터페이스와 구현 클래스에 대해 간략하게 알아보았습니다. 자바의 컬렉션 프레임워크는 다양한 자료구조를 제공하므로, 필요에 따라 적절한 클래스를 선택하여 사용하시면 됩니다. 문법적인 측면뿐만 아니라 자료구조의 특징과 활용 방법을 잘 이해하고 활용하여 프로그래밍을 하시기 바랍니다.

더 많은 자바 중급 문법과 컬렉션 프레임워크에 대한 내용은 블로그에서 확인하실 수 있습니다. 계속해서 업데이트되는 내용들을 기대해주세요! 많은 독자분들께 도움이 되기를 바랍니다. 감사합니다!

답글 남기기