HashMap 상품 관리 시스템
📋 문제 설명
HashMap을 사용하여 상품 ID를 키로 하는 상품 관리 시스템을 구현하세요.
Key-Value 자료구조의 활용법과 빠른 검색 방법을 학습합니다.
🎯 학습 목표
- HashMap의 기본 사용법
- Key-Value 쌍으로 데이터 저장 및 관리
- 상품 ID를 Key로 활용한 빠른 검색
- HashMap 순회 방법
💻 코드 구조
Product 클래스
Java
import java.util.HashMap;
import java.util.Map;
class Product {
private String id;
private String name;
private double price;
// TODO: Product 클래스의 디폴트 생성자를 만드세요.
// TODO: Product 클래스의 다음 생성자를 구현하세요.
// 힌트: id, name, price를 매개변수로 받아 초기화합니다.
public Product(String id, String name, double price) {
// this.id = id;
// this.name = name;
// this.price = price;
}
// TODO: getter 메소드들을 구현하세요.
// public String getId() { return id; }
// public String getName() { return name; }
// public double getPrice() { return price; }
// TODO: print 함수
// 힌트: "ID: [id], 상품명: [name], 가격: [price]원" 형식 출력
}
필드
private String id- 상품 ID (Key로 사용)private String name- 상품명private double price- 가격
구현해야 할 것
- 디폴트 생성자
- 매개변수가 있는 생성자
- 모든 필드에 대한 getter
print()메서드
OnlineStore 클래스
Java
class OnlineStore {
private HashMap<String, Product> products;
public OnlineStore() {
// TODO: products HashMap을 초기화하세요.
// 힌트: products = new HashMap<>();
}
public void addProduct(Product product) {
// TODO: 상품을 HashMap에 추가하세요.
// 힌트: 상품 ID를 키로 사용합니다.
// products.put(product.getId(), product);
}
public Product findProduct(String id) {
// TODO: 주어진 ID로 상품을 찾아 반환하세요.
// 힌트: products.get(id)를 사용
// 찾지 못하면 null이 반환됩니다.
return null;
}
public void removeProduct(String id) {
// TODO: 주어진 ID의 상품을 HashMap에서 제거하세요.
// 힌트: products.remove(id)를 사용
}
public void displayAllProducts() {
// TODO: 모든 상품의 정보를 출력하세요.
// 힌트:
// 1. entrySet()을 사용하여 HashMap을 순회
// 2. for (Map.Entry<String, Product> entry : products.entrySet())
// 3. entry.getValue()로 Product 객체를 가져와서 print() 호출
// 4. 상품이 없으면 "등록된 상품이 없습니다." 출력
}
}
필드
private HashMap<String, Product> products- 상품 맵 (Key: 상품ID, Value: Product 객체)
메서드
addProduct()- 상품 추가 (Create)findProduct()- ID로 상품 검색 (Read) - O(1) 시간 복잡도!removeProduct()- ID로 상품 삭제 (Delete)displayAllProducts()- 전체 상품 출력 (Read)
📝 Main 클래스 테스트
Java
public class Main {
public static void main(String[] args) {
OnlineStore store = new OnlineStore();
// TODO: 최소 3개의 상품을 생성하고 store에 추가하세요.
// 힌트:
// Product product1 = new Product("P001", "스마트폰", 899000.0);
// store.addProduct(product1);
// ... (나머지 상품도 동일하게)
// 상품 정보:
// - ID: "P001", 이름: "스마트폰", 가격: 899000
// - ID: "P002", 이름: "노트북", 가격: 1299000
// - ID: "P003", 이름: "무선이어폰", 가격: 199000
// TODO: 모든 상품 정보를 출력하세요.
System.out.println("=== 전체 상품 목록 ===");
// store.displayAllProducts();
// TODO: ID가 "P002"인 상품을 검색하고 그 정보를 출력하세요.
System.out.println("\n=== P002 상품 검색 ===");
// Product found = store.findProduct("P002");
// if (found != null) {
// found.print();
// } else {
// System.out.println("상품을 찾을 수 없습니다.");
// }
// TODO: ID가 "P001"인 상품을 삭제하세요.
System.out.println("\n=== P001 상품 삭제 ===");
// store.removeProduct("P001");
// System.out.println("상품이 삭제되었습니다.");
// TODO: 삭제 후 모든 상품 정보를 다시 출력하세요.
System.out.println("\n=== 삭제 후 전체 상품 목록 ===");
// store.displayAllProducts();
}
}
예상 출력:
Java
=== 전체 상품 목록 ===
ID: P001, 상품명: 스마트폰, 가격: 899000원
ID: P002, 상품명: 노트북, 가격: 1299000원
ID: P003, 상품명: 무선이어폰, 가격: 199000원
=== P002 상품 검색 ===
ID: P002, 상품명: 노트북, 가격: 1299000원
=== P001 상품 삭제 ===
상품이 삭제되었습니다.
=== 삭제 후 전체 상품 목록 ===
ID: P002, 상품명: 노트북, 가격: 1299000원
ID: P003, 상품명: 무선이어폰, 가격: 199000원
💡 학습 포인트
1. HashMap 기본 사용법
Java
// 생성
HashMap<String, Product> products = new HashMap<>();
// 추가 (Key, Value)
products.put("P001", product);
// 조회 (Key로 검색)
Product p = products.get("P001");
// 삭제 (Key로 삭제)
products.remove("P001");
// 크기
int size = products.size();
// Key 존재 확인
boolean exists = products.containsKey("P001");
2. HashMap 순회 방법
entrySet() 사용 (Key와 Value 모두 필요한 경우):
Java
for (Map.Entry<String, Product> entry : products.entrySet()) {
String key = entry.getKey();
Product value = entry.getValue();
// ...
}
keySet() 사용 (Key만 필요한 경우):
Java
for (String key : products.keySet()) {
Product value = products.get(key);
// ...
}
values() 사용 (Value만 필요한 경우):
Java
for (Product product : products.values()) {
// ...
}
3. ArrayList vs HashMap
| 구분 | ArrayList | HashMap |
|---|---|---|
| 저장 방식 | 순차적 (인덱스) | Key-Value 쌍 |
| 검색 속도 | O(n) - 순차 탐색 | O(1) - 해시 검색 |
| 순서 보장 | O (입력 순서) | X (순서 없음) |
| 중복 | 허용 | Key 중복 불가 |
| 사용 예 | 학생 목록 | 상품 ID로 조회 |
4. HashMap의 장점
- 빠른 검색: Key로 바로 접근 (O(1))
- 유일 Key: 중복 Key 자동 방지
- 실무 활용: 사용자 ID, 상품 코드, 주문 번호 등
5. 제네릭 (Generics)
HashMap<String, Product>: Key는 String, Value는 Product- 타입 안전성 보장
- 형변환 불필요
6. 실무 활용
- 재고 관리: 상품 코드로 빠른 재고 조회
- 사용자 관리: 사용자 ID로 프로필 조회
- 캐시 시스템: 자주 사용하는 데이터 저장