얕은 복사

clone 재정의는 주의해서 진행하라(2) - [3장. 모든 객체의 공통 메서드(아이템13)]
이전 글을 통해 불변 객체에서 clone을 사용하는 방법을 알아보았다. 이번에는 가변 객체에서 clone을 사용하는 방법을 알아보자. 가변 객체를 복제하는 3가지 방법을 살펴보자. 1. 배열 복사를 이용하는 경우 👨🚀 public class Stack implements Cloneable{ private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[..

clone()
1. 개념 👷♂️ clone() 메서드는 자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다. 2. 사용방법 👩⚕️ clone()은 Object 클래스에 다음과 같이 정의되어 있다. public class Object { protected native Object clone() throws CloneNotSupportedException; } 이를 사용하기 위해서는 다음 2가지를 수행하여야 한다. Cloneable 인터페이스를 구현한다. clone()을 오버라이딩하면서 접근 제어자를 protected에서 public으로 변경한다. public class User implements Cloneable { String name; int age; public User(String name, int age..

얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)
얕은 복사(Shallow Copy)란 주소값을 복사하는 것을 말한다. (스택 영역) 깊은 복사(Deep Copy)란 실제 값을 메모리 공간에 복사하는 것을 말한다. (힙 영역) 1. 얕은 복사(Shallow Copy) 🐝 얕은 복사(Shallow Copy)는 주소값을 복사하는 것이다. 참조값을 복사했기 때문에 위의 그림처럼 같은 인스턴스를 가리키고 있다. 그래서 기존의 값을 바꾸면 복사된 값도 바뀌게 되는 상황이 발생한다. public class User { String name; int age; public User(String name, int age) { super(); this.name = name; this.age = age; } } ---------- public class ShallowCop..