HashMap은 키(K), 밸류(V)로 구성되어있다.
만약 밸류가 객체로 되어있다면 다음과 같이 키값으로 객체를 뽑을 수 있다.
int memberNo = 10;
PageInfo pi = new PageInfo(listCount, currentPage, pageLimit, boardLimit, maxPage, startPage, endPage);
HashMap<String, Object> map = new HashMap();
map.put("memberNo", memberNo); // 5
map.put("pi", new);
// PageInfo [listCount=4, currentPage=1, pageLimit=5, boardLimit=10, maxPage=5, startPage=1, endPage=5]
제네릭을 별도로 명시하지 않았다면 기본 타입이 Object이다.
int형 memberNo는 자동으로 wrapper클래스 Integer로 변환되어 Object로 들어갔다.
Object는 최상위 클래스이기 때문에 어떠한 클래스도 받을 수 있다(다형성 적용)
제네릭은 HashMap<String, PageInfo>로 설정하였다면 객체의 필드값을 바로 뽑을 수 있다.
하지만 Object로 하였기 때문에 다운캐스팅 후 객체의 필드값을 뽑을 수 있다(getter이용)
((PageInfo)map.get("pi")).getListCount();
참고로 아래는 불가능하다. (부모클래스는 자식클래스 메소드를 사용할 수 없다)
map.get("pi").getListCount();
- 객체의 타입을 알 수 있는 방법
1. instancof 연산자 이용 => 반환 true/false
map.get("pi") instanceof Object // true
map.get("pi") instanceof PageInfo // true
2. getClass().getName() => 반환 클래스 경로
map.get("pi").getClass().getName()
// com.kh.semi.common.vo.PageInfo
3. getClass().getSimpleName() => 반환 클래스 식별자
map.get("pi").getClass().getSimpleName()
// PageInfo