JAVA Programming

[53] Object 클래스의 Clone() 메소드 , finalize() 메소드

꾸준히개발하자 2020. 7. 17. 15:32

 

 

 

package object;

class Book implements Cloneable { // 인터페이스 Cloneable 를 상속받아야 한다. 
	 // 이클래스가 복제 가능하다고 명시해줘야 한다. 
	String title;
	String author;
	
	public Book(String title, String author) {
		this.title = title;
		this.author = author;
	}
	
	public String toString() {
		
		return author + " , " + title;
	}

	
	// Clone() 은 메모리가 복제되기 때문에 그대로 메소드를 쓰면 된다. 
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone(); // 인스턴스 값을 복사 
	}

	// finalize()메소드는 직접 호출되는 메소드가 아니고  객체가 힙메모리에서 해제될때 가비지콜렉터에서 호출되는 메소드이다.
	@Override
	protected void finalize() throws Throwable {
						// 리소스해제 ,소켓 해제 등을 수행한다. 
		super.finalize();
	}
}

	public class ToStringTest extends Object { // Object 가 생략되어 있다 컴파일러가 붙여줌
		public static void main(String[] args) throws CloneNotSupportedException { // 이셉션이 발생할수있다. 
			Book book = new Book("태백산맥","공소영");	
			System.out.println(book); // 패키지.클래스이름 @ 해시코드 -> toString() 재정의 
		
			Book book2 = (Book)book.clone(); // clone()이 obj 로 반환되서 다운캐스팅을 해줘야 한다.		
			System.out.println(book2); // clone() 메소드를 사용하려면  Cloneable 를 명시해 줘야 한다. 
	}
}

 

Student2 kim = new Student2("김철중",100);

              

Student2 lee = (Student2) kim.clone();    <- 복사 객체 만들기