2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[item 13] Cloneable인터페이스의 역할 #40

Closed NuhGnod closed 1 year ago

NuhGnod commented 1 year ago

p.77에 이 인터페이스는 놀랍게도 Object의 protected 메서드인 clone의 동작 방식을 결정한다. 라고 되어있습니다. 그리고 해당 문단 마지막 줄에도 Cloneable의 경우에는 상위 클래스에 정의된 protected 메서드의 동작 방식을 변경한 것 이다. 라고 되어있습니다. 이 2문장에서 공통적으로 발하는 동작 방식을 결정(변경)에 대한 의미가 이해가 잘 안되네요.

단순히 Cloneable을 구현하면 clone메서드가 동작하고, 그렇지 않다면 CloneNotSupportedException을 던진다 는 것으로 이해하면 될까요? 아님 무언가 더 있는 걸 까요?

gmelon commented 1 year ago

저도 동작 방식의 변경을 말씀하신대로 Exception을 던지느냐, 아니면 제대로 clone() 메서드를 동작하게 하느냐를 결정하는 것으로 이해했습니다.

Object.clone()과 Clonable 인터페이스의 문서를 살펴봐도 아마 이해하신 내용이 맞는 것 같아요. 아래에 각각의 해석을 일부 옮겨봤습니다.

Object.clone()

Object 클래스의 clone 메서드는 특정한 복제 작업을 수행합니다. 먼저, 이 객체의 클래스가 Cloneable 인터페이스를 구현하지 않은 경우에는 CloneNotSupportedException이 발생합니다.

Clonable

Cloneable 인터페이스를 구현한 클래스는 Object.clone() 메서드에게 해당 클래스의 인스턴스를 필드 단위로 복사해도 되는 것을 알리기 위해 사용됩니다. Cloneable 인터페이스를 구현하지 않은 인스턴스에서 Object의 clone 메서드를 호출하면 CloneNotSupportedException 예외가 발생합니다. 이 인터페이스를 구현하는 클래스는 보통 Object.clone()을 (protected로 선언된) 오버라이드한 public 메서드를 함께 재정의해야 합니다. 이 메서드를 재정의하는 방법에 대한 자세한 내용은 Object.clone()을 참조하세요.