자바 - 맵 인터페이스

안녕하세요, 미래의 자바 개발자 여러분! 오늘 우리는 자바의 Collections 프레임워크中最も 다재다능하고 강력한 구성 요소 중 하나인 맵(Map) 인터페이스에 대해 배울 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 여정을 안내해 드리게 되어 매우 기쁩니다. 그러니 여러분의 좋아하는 음료를 마시고 편안하게 자리를 잡아, 함께 이 모험을 시작해 보겠습니다!

Java - Map Interface

맵(Map)이란?

거대한 도서관을 정리하고 싶을 때, 각 책을 찾기 위해 모든 책장을 검색할 필요가 없기를 바랄 것입니다. 이때 맵(Map)이 유용하게 쓰입니다. 맵은 프로그래밍 세계에서 마법의 도서관 사서처럼, 당신이 요청한 어떤 책이라도 즉시 찾아줄 수 있습니다.

자바에서 맵은 키-값 쌍을 저장하는 객체입니다. 각 키는 특정 값과 연결되어 있으며, 책 제목(키)이 도서관에서의 위치(값)와 연결되는 것과 같습니다.

맵(Map)의 주요 특성

  1. 각 키는 고유해야 합니다.
  2. 각 키는 최대 하나의 값과 매핑됩니다.
  3. 빠른 검색과 데이터检索에 완벽합니다.

맵(Map) 인터페이스 메서드

맵(Map) 인터페이스에서 가장 자주 사용되는 메서드 중 일부를 살펴보겠습니다:

메서드 설명
put(K key, V value) 맵에 키-값 쌍을 추가합니다
get(Object key) 지정된 키와 연결된 값을 반환합니다
remove(Object key) 지정된 키와 연결된 키-값 쌍을 제거합니다
clear() 맵에서 모든 키-값 쌍을 제거합니다
size() 맵에 있는 키-값 쌍의 수를 반환합니다
isEmpty() 맵이 키-값 쌍을 포함하고 있지 않다면 true를 반환합니다
containsKey(Object key) 맵에 지정된 키가 있으면 true를 반환합니다
containsValue(Object value) 맵에 지정된 값이 있으면 true를 반환합니다
keySet() 맵에 있는 모든 키의 Set을 반환합니다
values() 맵에 있는 모든 값의 Collection을 반환합니다
entrySet() 맵에 있는 모든 키-값 쌍의 Set을 반환합니다

맵(Map)을 구현한 클래스

자바는 맵(Map) 인터페이스를 구현하는 여러 클래스를 제공합니다. 가장 자주 사용되는 세 가지를 살펴보겠습니다:

1. HashMap

HashMap은 빠르게 책을 찾을 수 있는 속도가 빠른 사서지만, 책의 순서는 신경 쓰지 않습니다.

Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
ages.put("Charlie", 35);

System.out.println(ages.get("Bob")); // 출력: 30

이 예제에서는 사람들의 나이를 저장하기 위해 HashMap을 생성하고 있습니다. 키는 사람의 이름(String)이고, 값은 그들의 나이(Integer)입니다.

2. TreeMap

TreeMap은 모든 책을 제목의 알파벳 순서로 정렬하는 사서입니다.

Map<String, String> capitals = new TreeMap<>();
capitals.put("USA", "Washington D.C.");
capitals.put("France", "Paris");
capitals.put("Japan", "Tokyo");

for (String country : capitals.keySet()) {
System.out.println(country + ": " + capitals.get(country));
}

이 코드는 나라와 그 나라의 수도를 나라 이름의 알파벳 순서로 출력합니다:

France: Paris
Japan: Tokyo
USA: Washington D.C.

3. LinkedHashMap

LinkedHashMap은 책이 도서관에 추가된 순서를 기억하는 사서입니다.

Map<String, Double> prices = new LinkedHashMap<>();
prices.put("Apple", 0.99);
prices.put("Banana", 0.59);
prices.put("Cherry", 3.99);

for (Map.Entry<String, Double> entry : prices.entrySet()) {
System.out.println(entry.getKey() + ": $" + entry.getValue());
}

이 코드는 과일과 그 가격을 추가된 순서대로 출력합니다:

Apple: $0.99
Banana: $0.59
Cherry: $3.99

맵(Map)을 확장한 인터페이스

맵(Map) 인터페이스는 두 가지 주요 하위 인터페이스를 가지고 있습니다:

  1. SortedMap
  2. NavigableMap

이 인터페이스들은 정렬된 맵을 다루는 추가 기능을 제공합니다. TreeMap은 이 두 인터페이스를 모두 구현합니다.

맵(Map) 인터페이스의 예제

이제 몇 가지 실용적인 예제를 통해 이해를 더욱 solidify시키겠습니다:

예제 1: 학생 성적 추적 시스템

학생들의 성적을 추적하는 시스템을 구축하는 상상해 봅시다:

Map<String, Integer> studentGrades = new HashMap<>();

// 학생 성적 추가
studentGrades.put("Alice", 95);
studentGrades.put("Bob", 80);
studentGrades.put("Charlie", 85);

// 성적 업데이트
studentGrades.put("Bob", 82);

// 성적检索
System.out.println("Alice's grade: " + studentGrades.get("Alice"));

// 학생 존재 여부 확인
if (studentGrades.containsKey("David")) {
System.out.println("David's grade: " + studentGrades.get("David"));
} else {
System.out.println("David is not in the system.");
}

// 모든 학생 성적 출력
for (Map.Entry<String, Integer> entry : studentGrades.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}

이 예제는 맵에 추가, 업데이트,检索 및 반복을 하는 방법을 보여줍니다.

예제 2: 단어 빈도수 계산기

문장에서 단어의 빈도수를 계산하는 프로그램을 만들어 보겠습니다:

String sentence = "the quick brown fox jumps over the lazy dog";
String[] words = sentence.split(" ");

Map<String, Integer> wordFrequency = new HashMap<>();

for (String word : words) {
if (wordFrequency.containsKey(word)) {
wordFrequency.put(word, wordFrequency.get(word) + 1);
} else {
wordFrequency.put(word, 1);
}
}

for (Map.Entry<String, Integer> entry : wordFrequency.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}

이 프로그램은 문장을 단어로 나누고 각 단어가 나타나는 빈도수를 계산하여 맵에 저장합니다.

결론

축하합니다! 자바의 맵(Map) 인터페이스의 첫 걸음을 뗐습니다. 우리는 기본 개념을 배우고, 다양한 구현을 탐구하며, 몇 가지 실용적인 예제를 해결했습니다. 맵(Map)은 정보를 효율적으로 정리하고检索하는 데 도움이 되는 중요한 도구입니다.

자바의 여정을 계속하면서, 맵(Map)은 간단한 프로그램에서 복잡한 애플리케이션에 이르기까지 어디서나 자주 나타날 것입니다. 그들은 어떤 자바 개발자의 도구箱에서 빼놓을 수 없는 도구입니다.

계속 연습하고, 호기심을 가져라. 그러면 언제 그런가, 복잡한 문제를 해결하는 데 맵(Map)을 사용하여 쉽게 해결할 수 있을 것입니다. 행복하게 코딩하세요, 미래의 자바 마스터们!

Credits: Image by storyset