본문 바로가기

Programming!

Object의 복사는 무조건 Copy!!!


개발완료된 운영소스를 바통 받아서 요구사항 추가 작업중.. 

List 내의 element의 수정이 있어서 작업후 테스트를 하는데 예상외의 값이 자꾸 나온다.
- A,B,C 상품이 판매수량 만큼 복사되어 담겨있는 리스트
- 만일 A상품을 2개를 샀다면, 'A, A, B, C' 이런식.


내가 할 작업은 간단했다 A, A에 인덱스를 붙여주는 즉 A1, A2로,
근데.. 수정을 하면 자꾸 A2, A2로 출력된다.


으악... stream처리를 잘못했나? foreach 의 어떤부분이 문제인가? orika가 문제인가? Lombok? equlas? hashcode?...아니면 정말 내 인성이 문제인가????? 


추론은 추론을 낳고, 그 추론은 다시 더 깊은 추론으로 이어지고..


이렇게 몇시간을 소비하다 아몰랑.. 퇴근.


그리고 조용한 커피숍에서.. 혹시 리스트에 담겨있는 놈들이 문제 아닐까??? 설마하며 의심했던... 리스트에 복제된 A를 참조로 담아 놓은 건가?

아....역시 참조로 담겨있구나. 그러니 마지막 인덱스가 적용 되었겠지.



다행이다~ 내 인성이 문제는 아니였다.!!


오류코드)

....

 List<XxxxxDto> extendedRows = new ArrayList<>();

originList.stream().forEach(item -> {

IntStream.range(0, item.getQuantity().intValue()).forEach(i -> {

XxxxxDto extendedRow = item;

extendedRows.add(extendedRow);

});

});

return extendedRows;

....