본문 바로가기
카테고리 없음

Java computeIfAbsent 사용법 및 예제

by ironsoft 2025. 4. 3.
반응형
Java computeIfAbsent 사용법 및 예제

Java의 computeIfAbsent 메소드는 Map 인터페이스의 기본 메소드 중 하나로, 특정 키에 대한 값이 존재하지 않을 경우, 지정된 함수를 사용하여 값을 생성하고 이를 맵에 추가하는 데 유용합니다. 이 메소드는 특히 HashMap과 같은 맵을 사용할 때, 값을 동적으로 생성할 수 있어 효율적입니다. 이번 포스트에서는 computeIfAbsent의 사용법과 다양한 예제를 통해 이 메소드를 쉽게 이해할 수 있도록 도와드리겠습니다.

computeIfAbsent의 기본 사용법

computeIfAbsent 메소드는 두 개의 파라미터를 받습니다. 첫 번째는 키, 두 번째는 값 생성 로직을 정의하는 함수입니다. 이 메소드는 키가 존재하지 않을 경우에만 함수를 호출하여 값을 생성하고, 그 결과를 맵에 추가합니다. 기본적인 문법은 다음과 같습니다:

map.computeIfAbsent(key, k -> valueGeneratorFunction);

실용적인 팁 5가지

아래는 computeIfAbsent 메소드를 활용할 때 유용한 몇 가지 팁입니다.

1. 기본값 설정하기

키가 없을 때 기본값을 설정해주는 핸들러를 작성해보세요. 예를 들어, 특정 키의 값이 없을 경우 0으로 초기화하는 방식입니다. 이는 숫자 카운팅에 유용합니다.

2. 복잡한 객체 생성

복잡한 객체를 생성할 때 computeIfAbsent를 활용하면 코드가 간결해집니다. 예를 들어, 사용자 정보를 담는 객체를 생성할 수 있습니다. 맵에서 사용자 ID로 확인하고 없으면 새 객체를 생성하게 할 수 있습니다.

3. 동시성 문제 해결

멀티스레드 환경에서 computeIfAbsent를 사용하면 동시성 문제를 줄일 수 있습니다. 여러 스레드가 동시에 값을 추가하려 할 때, 이 메소드는 안전하게 작업을 처리합니다.

4. 성능 최적화

값을 계산하는 로직이 복잡할 경우, computeIfAbsent를 사용하여 불필요한 연산을 줄일 수 있습니다. 이미 존재하는 키에 대해서는 함수를 호출하지 않기 때문에 성능이 향상됩니다.

5. 데이터 정리

데이터를 정리할 때 유용합니다. 동일한 키에 대해 여러 번 추가하는 대신, computeIfAbsent를 사용하여 조건부로 값을 추가할 수 있습니다. 이를 통해 데이터의 일관성을 유지할 수 있습니다.

실제 활용 사례

사례 1: 사용자 로그인 카운팅

사용자가 로그인할 때마다 카운트를 증가시키는 애플리케이션을 고려해보겠습니다. computeIfAbsent를 사용하여 각 사용자의 로그인 횟수를 기록할 수 있습니다.


Map loginCounts = new HashMap<>();
String userId = "user123";

loginCounts.computeIfAbsent(userId, k -> 0);
loginCounts.put(userId, loginCounts.get(userId) + 1);

위의 코드에서, 사용자가 처음 로그인할 경우, computeIfAbsent가 호출되어 기본값 0이 설정됩니다. 이후 로그인할 때마다 카운트가 증가하게 됩니다.

사례 2: 카테고리별 상품 분류

온라인 쇼핑몰에서 상품을 카테고리별로 분류하는 경우입니다. 각 카테고리에 해당하는 상품 리스트를 관리할 수 있습니다.


Map> categoryMap = new HashMap<>();
String category = "Electronics";
Product product = new Product("Smartphone");

categoryMap.computeIfAbsent(category, k -> new ArrayList<>()).add(product);

여기서 computeIfAbsent는 주어진 카테고리가 존재하지 않을 경우 새 리스트를 생성하여 상품을 추가합니다. 이를 통해 카테고리별로 상품을 쉽게 관리할 수 있습니다.

사례 3: 단어 빈도 수 카운팅

문장에서 단어의 빈도 수를 세는 프로그램을 작성한다고 가정해봅시다. computeIfAbsent를 활용하여 각 단어의 출현 빈도를 쉽게 카운트할 수 있습니다.


Map wordCount = new HashMap<>();
String sentence = "Java is a programming language. Java is also popular.";

for (String word : sentence.split(" ")) {
    wordCount.computeIfAbsent(word, k -> 0);
    wordCount.put(word, wordCount.get(word) + 1);
}

이 코드는 각 단어를 키로 사용하고, 해당 단어의 빈도를 카운트하는 로직을 수행합니다. computeIfAbsent를 사용하여 단어가 처음 등장할 경우 0으로 초기화합니다.

사례 설명
1 사용자 로그인 카운팅
2 카테고리별 상품 분류
3 단어 빈도 수 카운팅

요약 및 실천 팁


이번 포스트에서는 Java의 computeIfAbsent 메소드의 사용법과 여러 가지 실제 적용 사례를 살펴보았습니다. computeIfAbsent는 맵에서 키에 대한 값을 안전하고 효율적으로 관리할 수 있는 방법을 제공합니다. 아래는 이 메소드를 활용하는 데 있어 유용한 실천 팁입니다.

  • 기본값을 설정하여 초기화하는 습관을 기르세요.
  • 복잡한 객체 생성을 간결하게 처리하세요.
  • 멀티스레드 환경에서 안전하게 값을 관리하세요.
  • 불필요한 연산을 줄여 성능을 최적화하세요.
  • 데이터의 일관성을 유지하세요.

이러한 팁을 바탕으로 computeIfAbsent를 활용하여 보다 효율적이고 안전한 Java 프로그램을 작성해보세요. 실습을 통해 이 메소드를 깊이 이해할 수 있을 것입니다.

반응형