인스턴스 복사(복제)
- clone 메소드
- Object 클래스에는 인스턴스의 복사를 위한 다음 메소드가 정의되어 있다.
protected Object clone() throws CloneNotSupportedException
그리고 이 메소드가 호출되면, 이 메소드가 호출된 인스턴스의 복사본이 생성되고, 이 복사본의 참조 값이 반환된다. 단 다음의 조건을 만족해야 이 메소드를 호출할 수 있다.
"Cloneable 인터페이스를 구현해야 합니다."
즉 Cloneable 인터페이스를 구현하고 있는 클래스의 인스턴스만이 clone 메소드의 호출이 가능하다. 만약에 Cloneable 인터페이스를 구현하지 않은 클래스의 인스턴스에서 clone 메소드를 호출하면 CloneNotSupportedException 예외가 발생한다.
그렇다면 Cloneable 인터페이스는 어떻게 정의되어 있을까? 구현해야 할 메소드는 무엇이 있을까?
결론부터 말하자면, Cloneable 인터페이스는 텅 빈 인터페이스이다. 즉, 구현해야 할 메소드가 하나도 존재하지 않는 인터페이스이다. Cloneable 인터페이스를 구현하는 이유는 다른 클래스와의 구별을 위한 특별한 표시의 목적으로 사용되었다.
즉 Cloneable 인터페이스의 구현은 다음의 의미를 담기 위함이다.
"이 클래스의 인스턴스는 복사(복제)를 해도 됩니다. 그러니 필요하다면 clone 메소드를 호출해서 인스턴스를 복사하세요."
인스턴스의 복사는 클래스에 따라서 매우 민감한(또는 허용해서는 안되는) 작업이 될 수도 있다. 따라서 인스턴스 복사의 허용여부는 클래스를 정의하는 과정에서 결정해야 한다. 그리고 인스턴스의 복사를 허용해도 된다는 결론이 나오면, Cloneable 인터페이스를 구현해서 클래스를 정의하면 된다.
'Java > Day25' 카테고리의 다른 글
[Java] Wrapper 클래스 (0) | 2021.12.07 |
---|---|
[Java] Clone 문제 (깊은 복사, 얕은 복사, 공변반환) (0) | 2021.12.07 |
[Java] isEquals (0) | 2021.12.06 |