[Java] Map, 객체를 value로 활용하기 (객체 중첩)

2025. 10. 22. 18:20Dev./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")); // 서울

특징

  1. key는 중복 불가
  2. value는 중복 가능
  3. 빠른 검색/조회 가능(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
반응형