HiDevelop

[Java] Object 클래스의 Clone 메소드 본문

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

'Java' 카테고리의 다른 글

[Java] Thread  (0) 2022.03.10
[Java]Generics  (0) 2022.03.01
[Java] JVM의 메모리 관리  (0) 2022.02.17
[Java] 다시 정리하는 예외  (0) 2022.02.11
[Java] Local Class & Anonymous 클래스  (0) 2022.02.07