객체 복사와 관리의 이해: 얕은 복사, 깊은 복사, 불변 객체

하요·2024년 7월 1일
0
post-thumbnail

객체 복사와 불변 객체 관리하기: Shallow Copy, Deep Copy, Immutable Objects

객체 복사는 메모리를 효율적으로 관리하고 데이터의 일관성을 유지하는 데 중요한 역할을 합니다. 객체 복사에는 얕은 복사와 깊은 복사가 있으며, 각각의 특성과 용도를 이해하고 적절하게 사용하는 것이 중요합니다.

얕은 복사 (Shallow Copy)

얕은 복사는 참조(메모리 주소)만을 복사하는 방식입니다. 따라서 두 변수가 동일한 메모리를 바라보게 되어 하나의 값을 변경하면 다른 변수의 값도 변경됩니다.

주요 속성

  • 메모리 절약: 참조만을 복사하므로 메모리를 효율적으로 사용할 수 있습니다.
  • 의도치 않은 변경: 동일한 메모리를 공유하므로 하나의 객체를 수정하면 다른 객체도 영향을 받습니다.

코드 예제

List<int> a = [1];
List<int> b = a; // 얕은 복사
print(a == b); // true (동일한 메모리 주소)

깊은 복사 (Deep Copy)

깊은 복사는 값이 동일한 새로운 객체를 생성하는 방식입니다. 따라서 두 변수가 다른 메모리를 바라보게 되어 하나의 값을 변경해도 다른 변수의 값은 변경되지 않습니다.

주요 속성

  • 데이터 일관성: 새로운 객체를 생성하므로 데이터를 독립적으로 관리할 수 있습니다.
  • 메모리 사용: 새로운 객체를 생성하므로 메모리를 더 많이 사용합니다.

코드 예제

List<int> a = [1];
List<int> b = List.from(a); // 깊은 복사
print(a == b); // false (다른 메모리 주소)

상황에 따른 사용 권장

  • 객체 수정이 발생하지 않는 경우: 얕은 복사를 사용하여 메모리를 절약합니다.
  • 객체 수정이 발생하는 경우: 깊은 복사를 사용하여 데이터의 의도치 않은 변경을 방지합니다.

불변 객체 (Immutable Object)

불변 객체는 객체가 생성된 후 그 상태를 변경할 수 없는 객체를 의미합니다. 불변 객체를 활용하면 얕은 복사와 깊은 복사의 장점을 모두 누릴 수 있습니다.

주요 속성

  • 수정 불가: 동일한 메모리에서 값을 수정할 수 없습니다.
  • 데이터 안정성: 데이터의 예기치 않은 변경으로부터 안전합니다.
  • 메모리 절약: 얕은 복사를 활용하여 메모리를 절약할 수 있습니다.
  • 멀티 스레드 유용: 멀티 스레드 환경에서 데이터 일관성을 유지할 수 있습니다.

코드 예제

const List<int> b1 = [1, 2, 3];
// b1.add(4); // 에러 발생
profile
flutter 개발자(진)

0개의 댓글