728x90

개요

Map에서 특정 키의 존재 여부를 확인하고 없을 때만 값을 추가하려면, 일반적으로 containsKey() 메서드로 키의 존재를 확인한 후 put() 메서드를 사용해야 합니다.

 

이런 방식은 코드가 길어지고 동시성 환경에서 문제가 발생할 수 있습니다. putIfAbsent 메서드를 사용하면 이러한 작업을 단 한 번의 호출로 안전하게 처리할 수 있습니다.

 

putIfAbsent 메서드란❓

putIfAbsentJava Map 인터페이스에서 제공하는 메서드로, 지정된 키가 존재하지 않을 때새로운 값을 추가하는 기능을 제공합니다. 이 메서드는 다음과 같은 특징을 가지고 있습니다.

  • 키가 존재하지 않을 때만 값을 추가
  • 원자적 연산으로 스레드 안전성 보장
  • 메서드 체이닝이 가능한 반환 값 제공

기존 방식과 putIfAbsent 비교

// 기존 방식
if (!map.containsKey("key")) {
    map.put("key", "value");
}

// putIfAbsent 사용
map.putIfAbsent("key", "value");

putIfAbsent 메서드 실제 사용 예시

Map<String, User> userMap = new ConcurrentHashMap<>();

// 사용자 등록 로직
public User registerUser(String userId, String name) {
    User newUser = new User(userId, name);
    User existingUser = userMap.putIfAbsent(userId, newUser);
    return existingUser == null ? newUser : existingUser;
}

 

위 코드는 putIfAbsent() 메서드를 사용하여 이미 등록된 사용자기존 정보를 반환하고, 새로운 사용자등록 후 새 정보를 반환하는 코드입니다.

 

주의사항❗️

1. null 값 처리

 

  • putIfAbsent는 키에 대한 값null인 경우도 없는 것으로 간주합니다.

2. 반환 값 활용

  • 메서드의 반환 값을 통해 키의 기존 존재 여부를 확인할 수 있습니다.

3. 성능 고려

  • 단순 조회보다는 약간의 오버헤드가 있을 수 있습니다.