반응형
SMALL
Java로 개발을 하다 보면
문자열이나 데이터 목록에서 특정 값이 몇 번 등장하는지 카운팅해야 하는 경우가 자주 있습니다.
이럴 때 매번 containsKey()로 체크하거나
null 체크를 직접 구현하면 코드가 지저분해지기 쉽습니다.
Java 8부터는 이런 불편함을 줄여주는
getOrDefault() 메서드가 추가되었습니다.
🔎 getOrDefault()란?
V getOrDefault(Object key, V defaultValue)
getOrDefault()는 Java 8에서 추가된
Map 인터페이스의 기본 메서드 중 하나입니다.
동작 방식은 매우 단순합니다.
- key가 존재하면 → 해당 key의 value 반환
- key가 없거나 value가 null이면 → 지정한 default 값 반환
즉, null 체크를 직접 하지 않아도 되는 편리한 메서드입니다.
사용 예제: 문자 개수 세기
아래 예제는 문자열을 입력받아
각 문자가 몇 번 등장했는지 HashMap으로 집계하는 코드입니다.

package four.one;
import java.util.HashMap;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str=in.next();
HashMap<Character, Integer> map=new HashMap<>();
for(char x : str.toCharArray()){
map.put(x, map.getOrDefault(x, 0)+1);
}
System.out.println("map : "+map);
}
}
코드 설명
map.getOrDefault(x, 0)
이 한 줄이 핵심입니다.
- x라는 key가 이미 존재하면 → 기존 value 반환
- 존재하지 않으면 → 0 반환
- 반환된 값에 +1을 해서 다시 put
덕분에 아래와 같은 코드가 필요 없어집니다.
if(map.containsKey(x)) {
map.put(x, map.get(x) + 1);
} else {
map.put(x, 1);
}
코드가 훨씬 간결하고 가독성이 좋아집니다.
대소문자 구분 주의
테스트 과정에서 무작위로 입력하다 보면
대문자와 소문자가 섞일 수 있습니다.
이 예제에서는 Character 타입을 key로 사용하기 때문에
대소문자를 서로 다른 문자로 구분합니다.
예를 들어:
AaA
결과는 다음과 같이 나옵니다.
A=2, a=1
만약 대소문자를 구분하지 않고 처리하고 싶다면
입력 문자열을 미리 변환해 주면 됩니다.
str = str.toLowerCase();
또는
str = str.toUpperCase();
💡 실무 활용 포인트
getOrDefault()는 다음과 같은 상황에서도 매우 유용합니다.
- 로그 레벨별 카운트
- 사용자 행동 통계 집계
- 단어 빈도수 분석
- API 응답 코드 통계
- 간단한 데이터 분석 로직
특히 카운팅 로직에서는 거의 필수적으로 사용되는 메서드입니다.
✅ 마무리
getOrDefault()는
Java 8 이후 컬렉션을 다룰 때 꼭 알아두면 좋은 메서드입니다.
- 코드가 짧아지고
- null 체크 실수를 줄일 수 있으며
- 가독성과 유지보수성이 모두 좋아집니다.
자바 컬렉션을 자주 사용한다면
습관적으로 활용해 보시길 추천드립니다.
반응형
LIST
'개발자 > 서버·인프라·백엔드' 카테고리의 다른 글
| linux ssl 인증서 만료일 확인하는 방법 (2) | 2024.04.01 |
|---|---|
| 리눅스에서 심볼릭 링크(Symbolic Link) 한 번에 찾는 방법 (원본 경로까지 확인) (0) | 2024.02.29 |
| 이클립스 패키지 계층형으로 표시하는 방법 (0) | 2024.01.18 |
| docker 명령어 정리 (0) | 2023.04.21 |
| 서버 to 서버 방화벽 확인하는 방법 (1) | 2023.04.17 |