Java | deep copy & shallow copy
Deep Copy & Shallow Copy
Note:
- Shallow Copy 의 경우 일반적으로 우리가 코딩을 하다보면 많이 나오는 상황중 하나이다. 얕은 복사는 객체를 생성하지만 안에 들은 내용은 기존 객체를 참조 하기 때문입니다.
- 기존 객체에서 변화가 일어난다면 참조 되어 있는 다른 객체에서도 변화가 발생을 하기 때문 입니다.
- 그에 반에 Deep Copy 의 경우 다른 객체를 생성 그리고 또 다른 레퍼런스를 생성을 의미 합니다. 그래서 Deep Copy 가 된경우 어떠한 상황이 오더라도 참조 되어 있지 않기 때문에 영향이 없습니다.
Sample Example
- samle code (Shallow Copy)
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);
}
}
}
- list 에 간단한 string 배열로된 값을 넣어준다
- 그리고 다른 하나의 리스트를 말들어서 처음 만든 리스트를 참조 시켜준다.
- 그리고 첫음에 만든 리스트에서 인덱스가 0인 값을 제거 해준다.
결과를 보자면 두개의 리스트에서 값이 사라져 버렸다.
- samle code (Deep Copy)
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);
}
}
}
- list 에 간단한 string 배열로된 값을 넣어준다
- 그리고 다른 하나의 리스트를 말들어서
두번째 만든 리스트에 addAll 함수로 데이터를 넣어준다.
- 그리고 첫음에 만든 리스트에서 인덱스가 0인 값을 제거 해준다.
Author And Source
이 문제에 관하여(Java | deep copy & shallow copy), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ewan/Java-Deep-Copy-Shallow-Copy저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)