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를 쓴건데..

왜이러는걸까요 ㅠㅠ 너무궁금합니다

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)