Shallow Copy : 인스턴스의 reference 복사 (window os 로 비교하면 링크 복사)
Deep Copy : 인스턴스의 메모리 복사 (window os로 비교하면 파일 복사)
Shallow Copy
List<Object> master = new ArrayList();
master.add("1");
master.add(new Member());
List<Object> feather = master;
master.add("master");
feather.add("feather");
System.out.println("reference = " + (master == feather)); // true
System.out.println("hashcode() = " + (master.hashCode() == feather.hashCode()) + ", equals() = " + master.equals(feather));
Deep Copy
ArrayList<Member> master = new ArrayList();
master.add(member);
ArrayList<Member> feather = (ArrayList<Member>) master.clone();
System.out.println("reference = " + (master == feather)); // false
master.add(new Member());
feather.add(new Member());
System.out.println("reference = " + (master == feather)); // false
System.out.println("hashcode() = " + (master.hashCode() == feather.hashCode()) + ", equals() = " + master.equals(feather));
유의사항
String master = "origin";
String feather = master;
System.out.println("reference = " + (master == feather)); // true
System.out.println("hashcode() = " + (master.hashCode() == feather.hashCode()) + ", equals() = " + master.equals(feather)); // true
master = "updated";
System.out.println("reference = " + (master == feather)); // false
System.out.println("hashcode() = " + (master.hashCode() == feather.hashCode()) + ", equals() = " + master.equals(feather)); //false
* 객체를 재할당 하게 되거나, immutable 객체인 String 의 데이터를 교체하면 (뭐 이것도 재할당이니..) shallow copy 관계는 깨진다.
* 내 생각엔 String 은 Shallow Copy 사용하는게 의미가 크기 없을 것 같다.
+ Cloneable
https://gyrfalcon.tistory.com/entry/Java-Tip-clone%EA%B3%BC-Cloneable
'java' 카테고리의 다른 글
Springframework 단상 (0) | 2019.09.30 |
---|---|
transient 와 volatile (0) | 2019.09.06 |
Serializable (0) | 2019.08.02 |
Java 실행 구조 (0) | 2019.07.25 |
Thread Dump (0) | 2019.07.22 |