clone
clone은 복제라는 뜻이다. 어떤 객체가 있을 때 그 객체와 똑같은 객체를 복제해주는 기능이 clone 메소드의 역할이다.
s1의 객체를 s2에 그대로 복사하기 위해서 s1.clone()을 입력하면 에러가 발생한다.

clone 메소드를 사용하기 위해서는 class 명 뒤에 implements Cloneable을 구분자를 입력해줘야 가능하다.
* Cloneable은 비어있는 인터페이스이지만 클래스가 복제 가능하다는 것을 표시하기 위한 구분자 역할을 한다.
clone의 접근제어자는 protected이다. 아래 코드를 살펴보면 Human이라는 클래스를 추가하여 test라는 메소드의 접근제어자를 protected를 설정하니 22행의 s1.test()를 실행해도 아무런 문제없이 작동하는 것을 확인할 수 있다.

아래 코드를 살펴보자

public Object clone() 메소드를 입력하면 에러가 발생한다.
clone 메소드의 CloneNotSupportedException 예외를 반드시 해결해 줘야 한다.
에러 모양을 눌러 Add throws declaration로 사용자에게 예외를 위임하고 코드 작성을 계속 진행하였다.
현재 보이는 22행에 보이는 s1.clone(); 을 입력하면 여기에도 에러가 발생한다. 11행에서 throws 처리한 예외가 아래 코드로 내려와 에러가 발생한 것이다. 이것을 해결하기 위해 에러 모양을 눌러 try/catch로 예외를 처리해준다.
s1의 객체를 s2 객체에 그대로 복사해 주기 위해서 22행과 같이 student s2 = s1.clone()을 입력하면 s1의 return 값이 Object이기 때문에 에러가 발생한다. s1을 student로 감싸 강제로 데이터 타입을 바꿔준다.
그러면 모든 에러를 다 해결하고 System.out.println으로 s1의 name이 s2에 그대로 잘 복사된 것을 확인할 수 있다.
'TIL > Java' 카테고리의 다른 글
[Java] replace (0) | 2022.02.07 |
---|---|
[Java] enum(enumerated type) (0) | 2022.02.07 |
[Java] equals (0) | 2022.02.01 |
[Java] toString (0) | 2022.02.01 |
[Java] finally (0) | 2022.01.27 |