Java | deep copy & shallow copy

DoItDev·2021년 9월 7일
0
post-thumbnail

Deep Copy & Shallow Copy

Note:

  • Shallow Copy 의 경우 일반적으로 우리가 코딩을 하다보면 많이 나오는 상황중 하나이다. 얕은 복사는 객체를 생성하지만 안에 들은 내용은 기존 객체를 참조 하기 때문입니다.
  • 기존 객체에서 변화가 일어난다면 참조 되어 있는 다른 객체에서도 변화가 발생을 하기 때문 입니다.
  • 그에 반에 Deep Copy 의 경우 다른 객체를 생성 그리고 또 다른 레퍼런스를 생성을 의미 합니다. 그래서 Deep Copy 가 된경우 어떠한 상황이 오더라도 참조 되어 있지 않기 때문에 영향이 없습니다.

화면 캡처 2021-09-06 153939


Sample Example

  1. 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);
        }
    }

}
  1. list 에 간단한 string 배열로된 값을 넣어준다
  2. 그리고 다른 하나의 리스트를 말들어서 처음 만든 리스트를 참조 시켜준다.
  3. 그리고 첫음에 만든 리스트에서 인덱스가 0인 값을 제거 해준다.

화면 캡처 2021-09-06 152303

결과를 보자면 두개의 리스트에서 값이 사라져 버렸다.

  1. 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);
        }
    }

}
  1. list 에 간단한 string 배열로된 값을 넣어준다
  2. 그리고 다른 하나의 리스트를 말들어서 두번째 만든 리스트에 addAll 함수로 데이터를 넣어준다.
  3. 그리고 첫음에 만든 리스트에서 인덱스가 0인 값을 제거 해준다.

화면 캡처 2021-09-06 152852

profile
Back-End Engineer

0개의 댓글