깊은 복사(Deep Copy) , 얕은 복사(Shallow Copy)

장동완·2023년 12월 7일
0

언어 지식

목록 보기
1/1

얕은 복사(Shallow Copy)

💡 '주소 값'을 복사 주소 값을 복사하기 때문에, 참조하고 있는 실제값은 같다**.**
Test test1 = new Test("장동완");
Test test2 = test1;

test1 == test2  // true

얕은 복사에 경우 참조하고 있는 실제 값(주소)이 같기 때문에
예를 들어 **test2 객체에 값을 변경할 경우 test1 객체에 값도 변하는 상황이 생긴다**.
Test test1 = new Test("장동완");
Test test2 = test1;

test2.name = "홍길동";

System.out.print(test1.name)  // 홍길동




깊은 복사(Deep Copy)

💡 '실제 값'을 새로운 메모리 공간에 복사하는 것 복사되는 기존 값과는 다른 객체

알고리즘 문제를 풀다보면 얕은 복사에서 제시한 문제점들이 일어날수 있어
Deep Copy 기능을 통해 해결할수있다.

  1. 객체를 복사하는 기능을 갖는다 (새롭게 주소를 생성).
  2. 같은 주소를 갖지 않는다.
  3. 변수개수가 엄청 많고 비슷한 변수값을 가진 여러 클래스를 만들때 편하다


구현법


### 코드로 구현시 (dart 언어로 구현)
Test(this.name ,this.age);

Test copyWith(
    int age,
    String name,
  ) {
    return new Test(
     age ?? this.age,
     name ?? this.name,
    );
  }

위 코드를 바탕으로 사용할 경우
Test test1 = new Test("장동완");
Test test2 = test1.copyWith();

test1 == test2 // false



자바의 경우 lombok 라이브러리 사용시 쉽게 구현가능

@Builder(toBuilder = true)  // Deep copy 기능
public class Test

마치며

개인적으로는 라이브러리를 사용해서 빠르게 구현하는것도 좋지만
코드로 구현하는법을 숙지하여 상황에따라 커스텀하여 프로젝트에 녹일수 있으면
좋을거 같다고 생각이 든다.

개인적으로 프로젝트를 하면서 사용해본 경험은 없지만
꼭 알아둬야하는 개념이라고 생각한다.
이러한 생각이 드는 개념들이 생각보다 많다 많은걸 알아두고 싶은
욕심이 생긴다.

profile
아기 개발자

0개의 댓글