Development/Java
Ex-깊은 복사(Deep Copy), 깊은 복사(Deep Copy) 도식도
codedragon
2021. 5. 29. 10:47
반응형
깊은 복사(Deep Copy)
- 깊은 복사(Deep Copy) 도식도
- 출력결과
- 소스코드
깊은 복사(Deep Copy) 도식도
얇은 복사후 참조하고 있는 인스턴스의 클론메소드 호출하게 됩니다.
출력결과
이름, 나이 정보 한국: [홍길동, 27] 미국: [Sara, 18] 이름, 나이 정보 한국: [홍길동, 27] 미국: [Sara, 18] 이름, 나이 정보 한국: [홍길동, 27] 미국: [Sara, 18] 이름, 나이 정보 한국: [김프로, 32] 미국: [Bill, 37] 이름, 나이 정보 한국: [홍길동, 27] 미국: [Sara, 18] |
소스코드
class InfoPerson implements Cloneable { private String strName; private int intAge; public InfoPerson(String x, int y) { strName=x; intAge=y; } public void showPosition() { System.out.printf("[%s, %d]", strName, intAge); } public void changePos(String x, int y) { strName=x; intAge=y; } public Object clone() throws CloneNotSupportedException { return super.clone(); } } class Nation implements Cloneable { InfoPerson infoKorean, infoAmerican; public Nation(String x1, int y1, String x2, int y2) { infoKorean=new InfoPerson(x1, y1); infoAmerican=new InfoPerson(x2, y2); } public void showPosition() { System.out.println("이름, 나이 정보"); System.out.print("한국: "); infoKorean.showPosition(); System.out.println(""); System.out.print("미국: "); infoAmerican.showPosition(); System.out.println("\n"); } public void changePos(String x1, int y1, String x2, int y2) { infoKorean.changePos(x1, y1); infoAmerican.changePos(x2, y2); } public Object clone() throws CloneNotSupportedException { //얇은 복사 Nation copy=(Nation)super.clone(); //다시 얇은 복사 copy.infoKorean=(InfoPerson)infoKorean.clone(); copy.infoAmerican=(InfoPerson)infoAmerican.clone(); return copy; } } class CloneEx02 { public static void main(String[] args) { Nation orgin = new Nation("홍길동", 27, "Sara", 18); Nation copy; orgin.showPosition(); try { copy = (Nation) orgin.clone(); orgin.showPosition(); copy.showPosition(); orgin.changePos("김프로", 32, "Bill", 37); orgin.showPosition(); copy.showPosition(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } |