computeIfAbsent를 아시나요?🫥
저는 자료구조를 좀 더 효율적으로 사용하려고 찾아보다가 발견한 메서드입니다!
Java의 Map 인터페이스에 있는 메서드로 키가 없을 때만 값을 계산하여 맵을 추가하고, 키가 이미 존재하는 경우에는 기존의 값을 반환합니다. 이러한 기능은 데이터 캐싱, 복잡한 객체 생성, 그리고 데이터 동기화에 매우 유용하게 사용될 수 있습니다.
computeIfAbsent의 사용법
computeIfAbsent 메서드는 다음과 같은 시그니처를 가지고 있습니다.

- key : 맵에서 찾으려는 키입니다.
- mappingFuction: 값이 존재하지 않을 때 키를 기반으로 값을 생성하는 함수입니다.
메서드는 키가 맵에 존재하지 않는 경우에만 mappringFunction을 호출하여 값을 생성하고, 생성된 값을 맵에 저장한 후 반환합니다.
키가 이미 존재하는 경우에는 기존의 값을 반환합니다.
사용 예시
간단한 예시를 통해 computeIfAbsent 메서드를 사용해 보겠습니다.

이 예시에서는 computeIfAbsent 메서드는 apple과 banana 키에 대한 값을 설정합니다. apple 키가 이미 존재하기 때문에 두 번째 호출에서는 값을 변경하지 않고 기존의 값을 유지합니다.

computeIfAbsent 장단점
장점
- 효율적인 데이터 캐싱
값이 없는 경우에만 값을 계산하므로 불필요한 계산을 방지할 수 있습니다. - 코드 간결화
복잡한 if-else 로직 없이 간결하게 값을 처리할 수 있습니다. - 동기화 처리
여러 스레드에서 동시에 접근하는 경우에도 유용하게 사용할 수 있습니다.
computeIfAbsent는 원자적으로 실행되기 때문에 동기화 문제가 발생하지 않습니다. - 성능 향상
맵에 존재하지 않는 키에 대한 값 계산을 지연시킴으로써 성능을 최적화할 수 있습니다. - 코드 중복 감소
기존의 키가 존재하지 않을 때만 값을 계산하고 삽입하는 코드를 반복적으로 작성할 필요가 없습니다.
단점
- 복잡성 증가
간단한 로직에서는 오히려 코드의 복잡성을 증가시킬 수 있습니다.
특히, lambda 표현식이나 메서드 참조를 잘 이해하지 못하는 개발자에게는 가독성이 떨어질 수 있습니다. - 추가적인 함수 호출 비용
mappingFunction이 복잡한 연산을 포함하거나 외부 자원을 호출하는 경우, 불필요한 함수 호출이 성능에 영향을 줄 수 있습니다. - 제약 조건
mappingFunction은 키가 존재하지 않을때만 호출되므로, 기존 값을 수정하거나 덮어쓰는 로직에는 사용할 수 없습니다.
💡 computeIfAbsent는 Java의 Map에서 제공하는 강력한 메서드로, 데이터 처리와 캐싱을 보다 효율적으로 관리할 수 있게 도와줍니다. 이를 활용하여 코드의 복잡성을 줄이고, 성능을 개선할 수 있습니다.
'Backend > Java' 카테고리의 다른 글
| [Java] 객체 지향 설계(Object-Oriented Design, OOD) (0) | 2024.07.28 |
|---|---|
| [Java] ConcurrentHashMap 멀티스레드 환경에서 안전한 해시맵 (0) | 2024.07.28 |
| [Java] abstract class 와 interface class의 차이 (0) | 2024.07.17 |
| [Java] of와 from 메서드의 차이 (0) | 2024.07.04 |
| [Java] Equals와 == 의 차이 (0) | 2024.05.25 |