Java | deep copy & shallow copy

13424 단어 JavaJava

Deep Copy & Shallow Copy

Note:

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


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인 값을 제거 해준다.

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

  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인 값을 제거 해준다.

좋은 웹페이지 즐겨찾기