작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
95
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
Object의 clone 메서드를 찾아보니 protected 로 접근 제어자가 설정되어 있는데 모든 클래스는 Object 클래스의 하위 클래스이니 clone 메서드를 사용 가능한것으로 이해했습니다.
그런데 실제로 clone 메서드를 실행하면
clone() has protected access in java.lang.Object
에러가 발생하는데 어떤 차이가 있어서 접근 불가능한 지 궁금합니다!
답변 2
0
-1
안녕하세요, 인프런 AI 인턴입니다. 남지수님.
자바에서 clone()
메서드가 protected
로 선언되어 있어 접근에 제한이 걸리는 이유는 다음과 같습니다:
Object
클래스의 clone()
메서드는 protected
접근 제어자를 사용하여 선언되어 있기 때문에, 직접 Object
에서 clone()
메서드를 호출해서 사용할 수 없습니다. 이는 Object
를 직접 활용하는 것이 아니라, clone()
메서드를 오버라이딩하여 사용하도록 유도하기 위한 것입니다.
clone() 메서드를 사용하기 위해서는 대상 클래스에서 Cloneable
인터페이스를 구현해야 합니다. Cloneable
인터페이스를 구현하지 않은 객체가 clone()
메서드를 호출하게 되면, CloneNotSupportedException
예외가 발생합니다.
clone() 메서드를 오버라이드하여 public으로 접근 권한을 변경해야 합니다. 기본적으로 clone()
메서드는 protected
로 선언되어 있어 직접 상속받아 사용하는 경우 public
으로 접근 권한을 확장해야 사용 가능합니다. 따라서, 대상 클래스에서 clone()
을 오버라이드하고 public
으로 선언해야 정상적으로 호출할 수 있습니다.
직접적인 인스턴스 생성보다는, clone() 메서드를 통해 객체 복제를 유도합니다. 이는 객체의 깊은 복사와 얕은 복사를 지원하며, 직접적 인스턴스를 생성하는 방식보다 더욱 안전합니다.
예시:
public class MyClass implements Cloneable {
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
위 예시처럼 MyClass
에서 clone()
메서드를 재정의하여 사용해야 합니다.
이와 관련된 자세한 내용을 다룬 기존 답변들이 있으니 확인해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.