본문 바로가기
프로젝트/세미프로젝트-병원 종합정보시스템 사이트

[오답] Map 객체가 덮어씌워지는 문제

by moca7 2024. 9. 22.

 

 

 

- 의료진 계정 검색 결과가 여러 행인 경우, 마지막으로 검색된 데이터로 다 덮어씌워지고 있다.

 

 

 

 

 

- DoctorDao.java는 이렇게 작성되어 있다. 

- 요청시 넘어온 진료과 값이 '전체' 일경우 조건 없이 select 하고, 특정 진료과 값이 있다면 그 값을 조건으로 select 한다.

- 쿼리를 실행한 결과를 doctor, member 두 vo 객체에 나눠 담는다.

- 두 vo 객체를 Map<K, V> 객체에 담는다. 

"doctor"라는 key 값을 제시하면 Object로 형변환된 Doctor 객체가 나오고,

"member"라는 key 값을 제시하면 Object로 형변환된 Member 객체가 나온다.

 

- 서블릿에서 응답페이지로 이동시키면서 이동 데이터로 List<Map<String, Object>> list를 담는다.

- jsp에서 <% List<Map<String, Object>> list = (List<Map<String, Object>>)request.getAttribute("list"); %> 으로 꺼내서 쓴다.

 

 

 

- 그런데 오류가 발생하진 않았지만 마지막에 Map에 담은 Doctor, Member 객체로 다른 행들도 다 덮어쓰여지고 있다.

 

 

 

 

ㅁ 오답 원인

 

 

 

- List<Map<String, Object>> list와 Map<String, Object> docMap을 둘 다 바깥에 써놨는데, 이게 문제다.

 

- Map 객체는 참조 타입이므로 반복문에서 같은 Map 객체를 사용해서 데이터를 덮어쓰면 

반복문에서 list에 add로 넣는다고 해도, Map들이 다 같은 주소를 참조하고 있으므로

마지막으로 저장한 값으로 Map들이 다 똑같아진다.

 

 

 

 

ㅁ 해결

 

 

- Map 객체를 반복문 안에서 선언해서 각기 다른 Map 객체가 List<Map<String, Object>>에 담기도록 한다.

 

 

 

 

 

- 여러 행이어도 중복되지 않고 정상적으로 보여진다.