java arrayList의 clear와 new 로 할당했을 때 차이점
조회수 619회
안녕하세요, 작업하다가 clear를 사용했었는데 값이 안나오던 친구가 new로 재할당 해주니까 제대로 나와서
차이점이 뭔지 알아보려고했는데, 도저히 모르겠어서 질문드립니다.
먼저 코드는 간단하게 다음과 같습니다.
@Override public List < CloudShoppingHisVO > selectViewGoodsList(ParamMap viewGoodsMap) throws Exception { List < CloudShoppingHisVO > ShoppingHisList = mypageDAO.selectViewGoodsList(viewGoodsMap); //리스트 select해주는 쿼리 (retrun 되는 친구임) ParamMap param = new ParamMap(); ParamMap imageMap = new ParamMap(); List < VodImageVO > titleImageList = new ArrayList < VodImageVO > (); List < VodImageVO > posterImageList = new ArrayList < VodImageVO > ();
//resturn 될 리스트의 속성인 titleImageList객체 생성
for (CloudShoppingHisVO shoppingHisVO: ShoppingHisList) {
... (코드생략)
List < VodImageVO > imageList = displayDAO.selectVodImageList(param);
titleImageList.clear();
posterImageList.clear();
//넣기 전 클리어 해주기, (for문 돌면서 이전에 있던 값 없애고 넣어주기위함)
for (VodImageVO image: imageList) {
String type = image.getType();
if ("10".equals(type)) {
titleImageList.add(image);
} else if ("20".equals(type)) {
posterImageList.add(image);
}
}
//위에서 add 해준 titleImageList를 foreach문 도는 VO에 세팅해준다.
shoppingHisVO.setTitleImageList(titleImageList);
shoppingHisVO.setPosterImageList(posterImageList);
}
return ShoppingHisList;
} 일단 clear를 사용한코드는 이렇구요. 디버깅 해보면 값이 잘 들어가는것도 확인이 됩니다.
그런데 마지막 return에 BP를 걸고 보면..
이렇게 비어있습니다... 그래서, clear 함수 대신 new로 재생성 해주니까 잘 되더라구요..?
근데 왜 이렇게 되는건지 모르겠습니다.
shoppingHisVO 라는 객체에 직접 할당해주고, VO에 titleImageList객체가 다 들어갔는데?
foreach문을 도는 shoppinHisList를 확인해보면 해당 내용이 사라져있고..
근데 그게 clear대신 new를 쓰면 또 정상적으로 들어간다..
new를 쓰면 clear보다 성능상으로 안좋지않나요? 그래서 clear를 쓴건데..
왜이러는걸까요 ㅠㅠ 너무궁금합니다
댓글 입력