Deep Copy

Gunjoo Ahn·2022년 8월 24일
0

Shallow Copy - 주소값만 Copy
Deep Copy - 메모리 공간을 새로 할당하여 Copy

Deep Copy

Java

  • Cloneable Interface
    Cloneable을 상속받아 clone() 메소드 재정의.
    권장하지 않으며 copy constructor나 factory를 권장.

  • Copy Constructor & Factory
    생성자에 자신 클래스 인스턴스를 인자로 받아 필드를 재정의하는 것.

위 방식들은 하위 객체는 따로 deep copy를 해주어야 한다.

Java Library

  • lombock
    @Builder(toBuilder = true)를 통하여 가능.
    하위 객체는 deep copy 되지 않는다.

  • ObjectMapper
    jackson-databind 라이브러리.
    객체를 string으로 바꾼 후에 바로 readValue하는 방식으로 deep copy 하는 것.

    하위 객체까지 deep copy되나 string으로 만들었다가 parsing하는 것이기에 느리다.

final ObjectMapper mapper = new ObjectMapper();
final Sample cloneSample = mapper.readValue(
		mapper.writeValueAsString(sample), Sample.class
    );
  • BeanUtils.copyProperties
    copyProperties은 Spring에서 제공하는 BeanUtils 클래스의 메서드로 복사하려는 양쪽 객체에 Setter가 구현되어 있어야만 동작한다.

원본 객체와 복사된 객체가 각각의 주소 공간을 가지고 있는 것은 맞으나 각 객체의 내용물은 얕은 복사로 이루어져 있음에 주의하자.

Reference

https://dkswnkk.tistory.com/537

profile
Backend Developer

0개의 댓글