Deep Copy & Shallow Copy
Note:
- Shallow Copy 의 경우 일반적으로 우리가 코딩을 하다보면 많이 나오는 상황중 하나이다. 얕은 복사는 객체를 생성하지만 안에 들은 내용은 기존 객체를 참조 하기 때문입니다.
- 기존 객체에서 변화가 일어난다면 참조 되어 있는 다른 객체에서도 변화가 발생을 하기 때문 입니다.
- 그에 반에 Deep Copy 의 경우 다른 객체를 생성 그리고 또 다른 레퍼런스를 생성을 의미 합니다. 그래서 Deep Copy 가 된경우 어떠한 상황이 오더라도 참조 되어 있지 않기 때문에 영향이 없습니다.
Sample Example
import java.util.ArrayList;
import java.util.List;
public class MainCopy {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
init(stringList);
List<String> strings2 = stringList;
System.out.println("list 1: " + stringList);
System.out.println("list 2: " + strings2);
System.out.println("인덱스 0 값 삭제");
stringList.remove(0);
System.out.println("list 1: " + stringList);
System.out.println("list 2: " + strings2);
}
public static void init(List<String> stringList) {
for (int i = 0; i < 5; i++) {
stringList.add("test" + i);
}
}
}
결과를 보자면 두개의 리스트에서 값이 사라져 버렸다.
import java.util.ArrayList;
import java.util.List;
public class MainCopy {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
init(stringList);
List<String> strings2 = new ArrayList<>();
strings2.addAll(stringList);
System.out.println("list 1: " + stringList);
System.out.println("list 2: " + strings2);
System.out.println("인덱스 0 값 삭제");
stringList.remove(0);
System.out.println("list 1: " + stringList);
System.out.println("list 2: " + strings2);
}
public static void init(List<String> stringList) {
for (int i = 0; i < 5; i++) {
stringList.add("test" + i);
}
}
}
두번째 만든 리스트에 addAll 함수로 데이터를 넣어준다.