깊은 복사, 얕은 복사알아보자.
복사면 복사지 깊은 복사는 뭐고, 또 얕은 복사는 무엇일까.
언어마다 조금씩 동작방식들이 달라서 딱 배열일땐 어떻고 슬라이스일땐 어떻고 이건
각 언어 특징에 따라 다르니까 알아서들 살펴보고,
여기서는 간단하게 개념을 정리해줄께.

깊은복사란. 데이터 전체를 복사하는거야. 데이터 A를 B 로 깊은 복사를 한다고 하면,
A 와 B 는 서로 독립적인 데이터가 되는거지. (B 내용:데이터 수정한다고 A의 것은 바뀌는게 없지. 새롭게 B 를 만든거니까)
그럼 얕는 복사는?
데이터 전체를 복사하는게 아니고 그냥 데이터를 가르키는 메모리 포인터만 복사(.. 이게 모든언어에 적용되는지....느는 뎃글달아주세요;;;)하고 실제 데이터는 어느구석(메모리상에)에 있는거지.
즉 A 를 얕은복사 해서 B 가 생기면 , A와 B는 다른놈이지만(이름도 다르고 포인터를 저장하는곳도다르지만) 결국은 가르키는 데이터(내용)는 하나라는거야.
이말은? B 를 이용해서 데이터를 바꾸면, A 의 데이터도 바껴있다는거지.
데이터는 하나인데 이걸 가르키는 놈이 2개가 생긴거야.
그럼 여기서 질문이 있을수 있겠지.
왜? 그냥 깊은복사 (직관적이고이잖아?) 만 하면 되잖아! 굳이 얕은 복사를 쓰는이유가 뭐야?
내가생각하는이유는?.....(자신의 생각을 뎃글 달아주세요)
데이터가 작고 사용도 많이 안하면 그냥 깊은복사 하면되지만,
작은 데이터를 여기저기서 엄청(?) 참조 많이 한다거나, 엄청 큰데이터를 참조해야 하는 경우에 데이터를 여기저기 다 깊은복사해서 만들면 무슨일이 생길까?
카피 하는데 리소스도 많이 들꺼고, 카피한걸 저장해야 하니까 메모리 공간도 많이 써야하고,
데이터마다 각각 다른값을 가지고 있을수도 있고 (의도한거면뭐상관없지만)
이경우에 얕은 복사를 사용하면, 카피도 안해도 되고, 메모리도 절약되고 그런 장점이 있지. (원본은 놔두고 별칭만 생기는 꼴이니까, 성능향상)
하지만, 나중에 데이터 다 고치고 나서, 데이터 무결성에 신경써야해. (의도되로변경한건지)
(데이터무결성: integrity, 유식한말이지만 별거 아냐. 그냥 데이터가 변경, 손상, 삭제 없이 어디서 참조하나 정확하고 일관된 상태를 유지)
얕은 복사는 딱봐도 우리가 생각하는 복사랑 개념이 좀 달르고
(우리는 복사기를 많이 봐서 그런가, 보통 다 깊은 복사를 생각하게 되거든),
언어마다 조금씩 내용도 달라서 쓰려면 잘 보고 써야 한다!
*c, c++ 에서 포인터를 이용해서 함수에 인자로 넘기게 되면? 이건 얕은 복사일까 깊은 복사일까? (읽은사람 정답 뎃글 달아주세요)
'소프트웨어 엔지니어 > 일반' 카테고리의 다른 글
| [소프트웨어 엔지니어] 에자일 방법론 (1) | 2024.09.19 |
|---|---|
| [소프트웨어 엔지니어] 캡슐화 추상화 (1) | 2024.09.17 |
| [소프트웨어 엔지니어] 프로그램 메모리 구조 (1) | 2024.09.13 |
| [소프트웨어 엔지니어] 스탠다드 라이브러리 왜 필요할까. (1) | 2024.08.28 |
| 소프트웨어 뭐지? (소프트웨어 엔지니어가 하는일?) (0) | 2024.08.21 |