BackEnd/Java

[JAVA] Map.put()의 반환 규칙 : null을 반환하는 이유(putIfAbsent 메서드)

0htmdwns 2025. 8. 12. 15:31

https://0htmdwns.tistory.com/17

 

[JAVA] Map : 하나의 key에 여러 value를 저장하는 방법

백준 https://www.acmicpc.net/problem/1181개요단어를 입력받고, 입력받은 단어들을 정렬하여 출력한다. 이때,중복을 제거해야한다.길이가 짧은 단어부터 출력한다.길이가 같다면 사전 순으로 출력한다.

0htmdwns.tistory.com

 

개요

위 글을 작성하던 중, map의 삽입 방식에서 null을 반환하는 이유가 궁금해 작성하게 되었음.

 

 

Map.put()의 반환 규칙?

  • put(key, value)는 이전에 그 key에 매핑된 value를 반환하고, value를 덮어 씌우는 것이다.
  • 만약 이전에 없었다면 null을 반환한다.
Map<String, String> map = new HashMap<>();

System.out.println(map.put("a", "apple")); // 이전 값이 없기 때문에 null 반환
System.out.println(map.put("a", "banana")); // 이전 값 "apple" 반환.

 

이 규칙 덕분에 put()만 보고도 "이 key가 새로 추가된 것인지, 덮어쓴 것인지" 알 수 있다.

 

왜 이러한 규칙이 있는 것일까?

  • 일관성 : Map의 모든 삽입 계열 메서드(put, putIfAbsent, replace 등)가 "이전 값을 반환"하는 규칙을 유지한다.
  • 상태 확인 용도:
if(map.putIfAbsent(key, value) != null){
	System.out.println("이미 값이 존재");
}

이렇게 하면 별도의 containsKey 메서드 호출 없이도 key가 새로 추가된 건지 확인 가능하다.

  • containseKey 메서드는 유무를 확인하고, 따로 put()을 해줘야 하지만,
  • putIfAbsent 메서드는 유무확인과 동시에 삽입이 가능해 코드가 비교적 깔끔하고 효율적이다.

 

즉, null 반환은 "해당 key에 기존 값이 없었다"는 뜻이고,

값이 있었다면 그 값을 반환해서 바로 분기 처리가 가능하도록 한 것이다.