이 글에서는 Java에서 HashMap을 반복(순회)하는 다양한 방법을 알아봅니다. Java HashMap은 Map 인터페이스를 해시 테이블 기반으로 구현한 자료구조로, 키(key)와 값(value)의 쌍으로 이루어진 컬렉션입니다.
HashMap을 순회하면 저장된 모든 키와 값을 손쉽게 조회할 수 있습니다. 아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
예시 입출력
입력값:
입력 HashMap: {Java=Enterprise, JavaScript=Frontend, Mysql=Backend, Python=ML/AI}기대 출력값:
HashMap의 키: Java, JavaScript, Mysql, Python, HashMap의 값: Enterprise, Frontend, Backend, ML/AI,
알고리즘
HashMap을 순회하는 절차는 다음과 같습니다.
Step 1 - 시작 Step 2 - 필요한 변수를 선언한다. Step 3 - 값을 정의한다. Step 4 - 문자열 타입의 HashMap을 생성하고 'put' 메서드로 요소를 초기화한다. Step 5 - 콘솔에 HashMap을 출력한다. Step 6 - 'keySet' 메서드를 사용해 HashMap의 각 키를 가져오며 반복한다. Step 7 - 결과를 콘솔에 출력한다. Step 8 - 종료
예제 1: main 함수에서 모든 로직 처리하기
첫 번째 예제는 모든 연산을 'main' 함수 안에서 한 번에 처리하는 방식입니다.
import java.util.HashMap;
import java.util.Map.Entry;
public class Demo {
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
HashMap<String, String> input_map = new HashMap<>();
input_map.put("Java", "Enterprise");
input_map.put("Python", "ML/AI");
input_map.put("JavaScript", "Frontend");
input_map.put("Mysql", "Backend");
System.out.println("정의된 HashMap: " + input_map);
System.out.print("\nHashMap의 키: ");
for(String key: input_map.keySet()) {
System.out.print(key);
System.out.print(", ");
}
System.out.print("\nHashMap의 값: ");
for(String value: input_map.values()) {
System.out.print(value);
System.out.print(", ");
}
}
}출력 결과
필요한 패키지가 임포트되었습니다
정의된 HashMap: {Java=Enterprise, JavaScript=Frontend, Mysql=Backend, Python=ML/AI}
HashMap의 키: Java, JavaScript, Mysql, Python,
HashMap의 값: Enterprise, Frontend, Backend, ML/AI,위 코드에서는 keySet() 메서드로 모든 키를 가져오고, values() 메서드로 모든 값을 가져와 향상된 for문(enhanced for loop)으로 하나씩 출력합니다.
예제 2: 객체 지향 방식으로 함수 분리하기
두 번째 예제는 객체 지향 프로그래밍(OOP) 스타일에 맞게 연산을 별도의 함수로 캡슐화한 방식입니다. 코드의 재사용성과 가독성이 더욱 높아집니다.
import java.util.HashMap;
class Demo {
static void print_keys(HashMap<String, String> input_map){
System.out.print("\nHashMap의 키: ");
for(String key: input_map.keySet()) {
System.out.print(key);
System.out.print(", ");
}
}
static void print_values( HashMap<String, String> input_map){
System.out.print("\nHashMap의 값: ");
for(String value: input_map.values()) {
System.out.print(value);
System.out.print(", ");
}
}
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
HashMap<String, String> input_map = new HashMap<>();
input_map.put("Java", "Enterprise");
input_map.put("Python", "ML/AI");
input_map.put("JavaScript", "Frontend");
input_map.put("Mysql", "Backend");
System.out.println("정의된 HashMap: " + input_map);
print_keys(input_map);
print_values(input_map);
}
}출력 결과
필요한 패키지가 임포트되었습니다
정의된 HashMap: {Java=Enterprise, JavaScript=Frontend, Mysql=Backend, Python=ML/AI}
HashMap의 키: Java, JavaScript, Mysql, Python,
HashMap의 값: Enterprise, Frontend, Backend, ML/AI,마무리
이처럼 Java에서는 keySet(), values(), 그리고 entrySet() 등의 메서드를 활용해 HashMap을 간편하게 반복할 수 있습니다. 간단한 스크립트라면 예제 1처럼 main 함수에서 바로 처리해도 좋고, 규모가 있는 프로젝트라면 예제 2처럼 기능별로 메서드를 분리해 유지보수성을 높이는 것이 좋습니다.