Java 8부터 Map 인터페이스에 유용한 고급 메서드들이 추가되었습니다. 이들은 데이터를 보다 효율적으로 처리하고, Map에 저장된 값을 동적으로 설정하거나 병합하는 데 도움을 줍니다. 여기서는 getOrDefault()로 기본값 설정, computeIfAbsent()와 computeIfPresent()로 동적 값 설정, merge()로 값 병합하는 방법에 대해 자세히 설명하겠습니다. 각 메서드의 예제를 통해 사용법을 익히고, Java Map의 최신 기능을 최대한 활용해보세요.
getOrDefault()와 기본값 설정
getOrDefault() 메서드는 Map에 존재하지 않는 Key에 접근할 때 기본값(default value)을 설정할 수 있는 기능을 제공합니다. 특정 키에 값이 없으면 지정한 기본값을 반환합니다. 이는 null 값에 대한 예외 처리를 줄이고 코드의 가독성을 높여줍니다.
getOrDefault() 예제
import java.util.HashMap;
import java.util.Map;
public class GetOrDefaultExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
// "Charlie" 키가 없으므로 기본값 75 반환
int score1 = scores.getOrDefault("Charlie", 75);
System.out.println("Charlie's score: " + score1);
// "Alice" 키가 있으므로 해당 값 반환
int score2 = scores.getOrDefault("Alice", 0);
System.out.println("Alice's score: " + score2);
}
}
이 예제에서 getOrDefault()는 Charlie에 대한 기본값을 반환하므로, 새로운 값을 추가하지 않아도 안전하게 값을 가져올 수 있습니다. Map 기본값 설정이 필요한 상황에서 유용하게 사용할 수 있습니다.
computeIfAbsent()와 computeIfPresent()를 이용한 동적 값 설정
computeIfAbsent()와 computeIfPresent() 메서드는 키가 존재하지 않거나 존재할 때 동적으로 값을 설정하는 데 사용됩니다. computeIfAbsent()는 특정 키가 없을 때 새로운 값을 계산하고 추가하며, computeIfPresent()는 키가 있을 때만 계산된 값을 업데이트합니다. 이 기능은 Map에 저장된 값을 효율적으로 관리하는 데 유용합니다.
computeIfAbsent() 예제
import java.util.HashMap;
import java.util.Map;
public class ComputeIfAbsentExample {
public static void main(String[] args) {
Map<String, String> names = new HashMap<>();
names.put("A", "Alice");
names.put("B", "Bob");
// "C" 키가 없으므로, 새로운 값 "Charlie" 추가
names.computeIfAbsent("C", key -> "Charlie");
System.out.println("Names Map: " + names);
// "A" 키가 이미 존재하므로 값 추가되지 않음
names.computeIfAbsent("A", key -> "Alex");
System.out.println("Updated Names Map: " + names);
}
}
computeIfAbsent() 메서드는 Map에 키가 없을 때 값 설정을 유연하게 처리해 줍니다. 이 기능은 null 값 또는 특정 조건에서 동적 값 생성이 필요할 때 특히 유용합니다.
computeIfPresent() 예제
import java.util.HashMap;
import java.util.Map;
public class ComputeIfPresentExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
// "Alice"가 이미 있으므로 점수 5 추가
scores.computeIfPresent("Alice", (key, value) -> value + 5);
System.out.println("Scores after Alice's update: " + scores);
// "Charlie" 키가 없으므로 아무 일도 일어나지 않음
scores.computeIfPresent("Charlie", (key, value) -> value + 10);
System.out.println("Scores after Charlie's update: " + scores);
}
}
computeIfPresent()는 키가 존재할 때만 값 변경을 수행하므로, 특정 키의 값에 대한 조건부 업데이트가 필요한 경우 적합합니다.
merge()를 활용한 값 병합
merge() 메서드는 Map에 저장된 값을 병합할 때 유용합니다. 기존 키가 없으면 값을 추가하고, 키가 있으면 기존 값과 새로운 값을 병합합니다. 이는 주로 누적 계산, 문자열 연결 또는 특정 연산이 필요할 때 사용됩니다.
merge() 예제
import java.util.HashMap;
import java.util.Map;
public class MergeExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
// Alice 점수에 10 추가 (병합)
scores.merge("Alice", 10, Integer::sum);
System.out.println("Alice's merged score: " + scores);
// Charlie 점수가 없으므로 새로운 값 70 추가
scores.merge("Charlie", 70, Integer::sum);
System.out.println("Charlie's added score: " + scores);
// 특정 연산을 이용한 문자열 병합 예제
Map<String, String> names = new HashMap<>();
names.put("key1", "Hello");
names.merge("key1", " World", String::concat);
System.out.println("Concatenated String: " + names.get("key1"));
}
}
merge()는 Map의 값을 병합하여 누적하거나, 문자열을 연결하고, 조건에 맞는 데이터를 조작할 때 유용합니다. Map 데이터 병합을 위한 효율적인 메서드로서 다양한 상황에 적용할 수 있습니다.
참고사이트
'JAVA' 카테고리의 다른 글
[JAVA] Map을 사용한 데이터 변환과 필터링 (0) | 2024.11.06 |
---|---|
[JAVA] 고급 Map 패턴 및 활용 예제 (0) | 2024.11.06 |
[JAVA] Map 동기화 멀티스레딩 (2) | 2024.11.05 |
[JAVA] Map 성능 최적화와 메모리 관리 (0) | 2024.11.05 |
[JAVA] Map 반복문과 순회 방법 (0) | 2024.11.05 |
[JAVA] Map 메서드 활용 (0) | 2024.11.05 |
[JAVA] Map 기본 사용법 (0) | 2024.11.02 |
[JAVA] Map 인터페이스와 구현체 (1) | 2024.11.02 |