[Java] Map, 객체를 value로 활용하기 (객체 중첩)
2025. 10. 22. 18:20ㆍDev./Java
728x90
반응형
Map
key, value의 쌍으로 데이터를 저장하는 자료구조
Map<String, String> map = new HashMap<>();
map.put("name", "철수");
map.put("city", "서울");
System.out.println(map.get("name")); // 철수
System.out.println(map.get("city")); // 서울
특징
- key는 중복 불가
- value는 중복 가능
- 빠른 검색/조회 가능(key로 value접근)
구현체
| Hashmap | Key 해시값으로 저장 → 조회 빠름 |
| LinkedHashMap | 입력 순서 유지 |
| TreeMap | Key 기준 정렬 |
Map Value에 객체 사용
Value에 클래스 객체를 담으면 단순 값뿐 아니라 상태와 동작(메서드)까지 관리 가능
예제: 도서관 대출/반납
book 클래스
public class Book {
private String title;
private boolean isBorrowed;
public Book(String title) {
this.title = title;
this.isBorrowed = false;
}
public void borrow() {
if (!isBorrowed) {
borrowed = true;
System.out.println(title + "을 대출했습니다.");
} else {
System.out.println(title + "은 이미 대출 중입니다.");
}
}
public void returnBook() {
borrowed = false;
System.out.println(title + "을 반납했습니다.");
}
public String getTitle() {
return title;
}
}
Map에 객체 담기(제네릭)
value에 넣을때 제네릭 객체 타입으로 지정해 넣어준다.
Map<String, Book> library = new HashMap<>();
Book javaBook = new Book("자바 입문");
Book springBook = new Book("스프링 기초");
library.put(javaBook.getTitle(), javaBook);
library.put(pythonBook.getTitle(), springBook);
Map에서 객체 꺼내서 사용
Book book = library.get("자바 입문");
book.borrow(); // 자바 입문을 대출했습니다.
book.returnBook(); // 자바 입문을 반납했습니다.
- Map<String, Book>으로 캐스팅 할 필요 없음
- 객체의 필드와 메서드를 바로 사용할 수 있음
Map에서 value가 제네릭타입 지정되지않은 Object일 경우
//객체 담기
Map<String, Object> map = new HashMap<>();
map.put("book1", new Book("자바 입문"));
//객체 꺼내서 사용할 때
Book book = (Book) map.get("book1");
book.borrow();
- 꺼낼 때 타입 캐스팅 필요
- Object는 모든 타입을 담을 수 있어 컴파일러가 타입을 알 수 없음
- 따라서 타입 안전성을 위해 제네릭 <Book> 사용하는 것이 권장
728x90
반응형
'Dev. > Java' 카테고리의 다른 글
| [Java] 상태 패턴 (State Pattern) (0) | 2025.10.24 |
|---|---|
| [Java] List, 객체를 value로 활용하기 (객체 중첩) (0) | 2025.10.23 |
| [Java] getter/setter 왜 사용 지양해야할까? (0) | 2025.10.21 |
| [Java] OCP(Open/Closed Principle) (0) | 2025.10.20 |
| [Java] Stack(스택) 자료구조 (0) | 2025.10.17 |