Java
[Java] Object 클래스의 Clone 메소드
꽃달린감나무
2022. 2. 18. 20:47
728x90
- Clone 메소드
protected object clone() throws CloneNotSuppertedException
해당 메소드는 Object의 클래스에 정의되어 있는 메소드로, 호출된 인스턴스의 복사본이 생성되고, 복사본의 참조 값(주소값)을 반환한다. 다음의 코드를 보자
class Cat implements Cloneable{
String name;
int age;
public Cat(String name, int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.printf("[%s, %d]",name, age);
System.out.println("");
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Test {
public static void main(String[] args) {
Cat catA = new Cat("쵸비", 9);
Cat catB;
try {
catB = (Cat)catA.clone();
catA.show();
catB.show();
}
catch(Exception e){
e.printStackTrace();
}
}
}
다음 코드는 CatA 인스턴스를 CatB 복사하는 코드이다. 특별한 점은 찾았는가?
첫번째는
class Cat implements Cloneable{...}
Cloneable 인터페이스를 구현한다는 것이다. 그럼 Cloneable은 무슨 인터페이스이길래 clone메소드를 사용할 클래스에 구현해줘야 하는가?
public interface Cloneable {}
텅 빈 인터페이스이다. 인터페이스는 오버라이딩을 하기위해 사용하기도 하지만 하나의 구분자역할을 하기도 한다. 즉 이 클래스는 복제가 가능합니다 라는 구분을 해주고 있는 것이다.
두번째는
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
Object 클래스의 clone 메소드를 오버라이딩 한 거이다. 그 이유는 Object 클래스 정의 clone은 protected로 접근제어자가 선언되어있기 때문에 상속을 받은 클래스와 동일 패키지내에서만 사용이 가능하다. 그렇기에 접근 제어자를 public으로 선언하여 오버라이딩한 것 이다
728x90