728x90
개요
Map에서 특정 키의 존재 여부를 확인하고 없을 때만 값을 추가하려면, 일반적으로 containsKey() 메서드로 키의 존재를 확인한 후 put() 메서드를 사용해야 합니다.
이런 방식은 코드가 길어지고 동시성 환경에서 문제가 발생할 수 있습니다. putIfAbsent 메서드를 사용하면 이러한 작업을 단 한 번의 호출로 안전하게 처리할 수 있습니다.
putIfAbsent 메서드란❓
putIfAbsent는 Java 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. 성능 고려
- 단순 조회보다는 약간의 오버헤드가 있을 수 있습니다.