자바 clone. 얕은복사와 깊은복사

브로디·2024년 1월 20일
0

자바 clone. 얕은복사와 깊은복사

clone은 Object객체의 메서드인데 기존 인스턴스의 원본값은 유지하면서 새로운 인스턴스를 만들고 싶을 때 사용한다.
그런데 복사되는 인스턴스 내부에 참조타입이 있다면 그 참조타입까지 새로운 값으로 복사되지는 않는다. 이 때문에 복사된 인스턴스 내부의 참조타입을 변경하면 기존의 인스턴스 내의 참조타입 변수의 값이 변경하게 된다. 이를 shallow copy. 얕은 복사라고 한다.

clone을 사용하려는 사람들은 기존 인스턴스를 완전하게 복사하고 싶을 것이다. 이 때문에 clone메서드를 오버라이드 해서 참조타입에 대한 부분을 새롭게 생성해서 할당한 뒤에 인스턴스를 반환해줘야 한다.

그런데 커스텀 클래스는 Object 클래스를 상속받고 있기 때문에 clone메서드를 사용할 수 있을 거라 생각했지만 그렇지 않았다. clone메서드는 protected 접근제한자기 때문이다. 우리가 정의하는 커스텀 클래스의 패키지는 java.util에 있지 않기 때문에 제한이 불가하다. 따라서 public으로 바꾸면서 오버라이드 해줘야 사용할 수 있다. 그리고 Clonable 인터페이스 또한 채택해줘야 exception이 나오지 않기 때문에 인터페이스 채택도 해야 한다.

얕은복사 vs 깊은복사


출처 : Shallow Copy vs Deep Copy Java

profile
햅삐햅삐 데이

0개의 댓글