객체 복사는 주로 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) 두 가지 방법으로 이루어진다.
깊은 복사(Deep Copy)
깊은 복사는 객체 내부의 값을 새로운 객체에 넣는 방법이다.
깊은 복사를 위한 방법
깊은 복사를 하기 위한 방법에는 다음과 같은 세 가지가 있다:
- 스택 영역에서 일어나는 방식:
- 복사하려는 배열과 같은 크기의 객체를 생성한다.
- 같은 인덱스에 위치한 값을 꺼내와 입력해준다.
- 힙 영역에 있는 배열 내부의 값을 스택 영역으로 꺼내와 힙의 다른 배열에 넣어줘 연산한다.
- 힙 영역에서 일어나는 방식:
- Object를 통해서 자식의 객체를 힙 영역에 복사하고 생성된 주소를 넘겨준다.
- 단, 복제가 가능한 클래스만 가능하다.
- 데이터를 가진 클래스들은 clone()을 재정의, 기능만 가진 클래스는 하지 않는다.
- 시스템 메모리에서 사용하는 방식:
- 배열에서만 사용하고 배열을 합칠 수 있다.
얕은 복사(Shallow Copy)
얕은 복사는 객체의 주소를 전달하는 방식이다. 이렇게 되면 복사한 객체와 원본 객체가 같은 데이터를 바라보게 된다.