java.lang.Cloneable 인터페이스 구현한 객체만 복제 가능
원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체 생성하는 것
복제 종류
얕은 복제(thin clone): 필드 값만 복제 (참조 타입 필드는 번지 공유)
깊은 복제(deep clone): 참조하고 있는 객체도 복제
// 객체복사가 되기위한 클래스는 조건이 있다.
// Cloneable 인터페이스를 구현한 클래스 이어야 한다.
public class Member /* extends Object */ implements Cloneable {
//필드 : 기본타입과 참조타입을 구분해서 확인
//참조타입
public String id;
public String name;
public String password;
//기본타입
public int age;
public boolean adult;
public Member(String id, String name, String password, int age, boolean adult) {
this.id = id;
this.name = name;
this.password = password;
this.age = age;
this.adult = adult;
}
// 객체복사기능을 갖는 메소드
// 얕은복사
public Member getMember() {
Member cloned = null;
try {
cloned = (Member) clone(); //얕은복사. 즉 참조타입의 필드는 주소만 공유만하고. 새로운 객체생성안함.
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cloned;
}
}
public class MemberExample {
public static void main(String[] args) {
//원본객체생성
Member original = new Member("blue", "홍길동", "12345", 25, true);
Member cloned = original.getMember();
cloned.password = "67890"; // "67890"문자열 데이타의 기억장소에 새로 생성되고, 그곳의 주소가 대입된다.
//String클래스의 참조타입
System.out.println("원본값: " + original.password + " : " + "복제값: " + cloned.password);
//기본타입
System.out.println("원본값: " + original.age + " : " + "복제값: " + cloned.age);
}
}
'JAVA' 카테고리의 다른 글
System클래스 (getProperty) (0) | 2022.10.07 |
---|---|
System 클래스 (currentTimeMillis,nano Time) (0) | 2022.10.07 |
Object 클래스 객체 해시코드(hashCode()) (0) | 2022.10.07 |
Object 클래스 equals메소드 (0) | 2022.10.07 |
제네릭 메서드 예제 (태그 설명) (0) | 2022.09.29 |