본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/etc

shallow copy / deep copy

by 지오ㄴl 2020. 10. 27.

한 리스트에 대해서

하나는 적용결과로,

하나는 변동가능한 보여주기용으로(앨범 선택) 사용해야한다.

 

이 두 리스트는 언제는 같으면서도 독립적으로 사용되어야 한다.

(앨범에서 사진을 선택하고 적용을 누르지 않고 앨범창을 닫은 다음

다시 앨범 선택버튼을 누르면 

이전에 적용하지 않은 의미없는 선택된 이미지들 대신

그 이전에 적용했던, 결정되어있는 리스트를 보여주어야 한다.)

 

 

앨범에서 가져온 이미지 리스트를

적용결과 필드,

보여주기용 필드에 각각 

넣는다고 해보자

 

List<Photo> imageList = [Photo(), Photo(), Photo()];

List<Photo> _photoList = List<Photo>();	//보여주기용
List<Photo> _prePhotoList = List<Photo>();	//적용결과용

 

대표적으로 

1) = 으로 넣어주는 방법
2) addAll() 로 넣어주는 방법

이 있다.

 

하지만 대부분의 프로그래밍 언어에서 위의 방법으로 넣으면

copy by reference에 의해

처음의 imageList의 각 Photo 요소의 메모리가 할당되는 것이기 때문에

어느 하나의 리스트에서 요소가 변경되면

모든 리스트에서 해당 객체가 변경된다.

 

그렇다면 각 리스트가 독립적으로 사용될 수 없다.

 

그래서 copy by value(deep copy)방식으로 list를 복사하려면

직접 프로그래밍해야한다.

 

_prePhotoList.forEach((element) {
      _photoList.add(new Photo(widget: element.widget, isSelected: element.isSelected));
    });

 

반응형

댓글