Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

깊은 복사와 얕은 복사의 차이에 대해 설명해주세요. #38

Open
0Hooni opened this issue Jan 12, 2025 · 4 comments
Open

Comments

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 12, 2025

No description provided.

@0Hooni 0Hooni changed the title Deep Copy와 얕은 Copy 차이에 대해 설명해주세요. 깊은 복사, 얕은 복사의 차이에 대해 설명해주세요. Jan 12, 2025
@0Hooni 0Hooni changed the title 깊은 복사, 얕은 복사의 차이에 대해 설명해주세요. 깊은 복사와 얕은 복사의 차이에 대해 설명해주세요. Jan 12, 2025
@youn9k
Copy link
Collaborator

youn9k commented Jan 16, 2025

깊은 복사는 복사했을 때 완전히 새로운 인스턴스가 생성되는 것을 깊은 복사, 얕은 복사는 참조만 복사되는 것을 얕은 복사라고 합니다.
값 타입의 경우 깊은 복사가 일어나지만, class와 같은 참조 타입은 복사하는 경우 기존 인스턴스의 힙 메모리 주소를 복사하게 되고, 동일한 인스턴스를 가리키게 되어 복사한 인스턴스를 수정할 경우 기존 인스턴스에도 동일하게 반영됩니다.

@hsw1920
Copy link
Owner

hsw1920 commented Jan 17, 2025

값 타입과 참조 타입은 복사 방식이 다릅니다.
일반적으로 값타입은 Deep Copy, 참조타입은 Shallow Copy가 발생한다고 설명할 수 있지만 COW가 이뤄지는 경우에는 값 타입도 부분적으로 Shallow Copy를 수행합니다.
깊은 복사는 데이터 자체를 복사하는 방법입니다. 각 데이터 인스턴스가 독립적인 메모리 영역을 차지하여 복사한 데이터를 변경하더라도 원본 데이터에 영향을 주지 않습니다.
얕은 복사는 이름처럼 최소한의 복사만 하는 방법입니다. 복사를 해도 독립적인 인스턴스의 메모리가 생기지 않고, 대신 원본 데이터의 주소값을 공유합니다. 원본과 복사본이 같은 주소값을 참조하기 때문에 한 쪽의 데이터를 바꾸면 다른 쪽에도 영향을 주게 됩니다.

@Kiyoung-Kim-57
Copy link
Collaborator

깊은 복사와 얕은 복사는 값을 복사할 때 실제 값을 복사하는지 여부에 따라 나뉘게 됩니다.
깊은 복사는 실제 값을 복사합니다. 값 타입을 복사하게 될 경우 깊은 복사가 일어납니다.
얕은 복사는 실제 값이 아닌 메모리 주소를 복사합니다. 참조 타입이 복사될 때 얕은 복사가 일어납니다.

@0Hooni
Copy link
Collaborator Author

0Hooni commented Jan 17, 2025

🙋🏻 답변

깊은 복사와 얕은 복사는 swift에서 객체나 구조체에서 해당 인스턴스를 복제할 때 사용되는 방식입니다.

얕은 복사는 주로 참조 타입을 복사할 때 사용되는 방식입니다. 참조 타입을 복제할 때 해당 인스턴스의 모든것을 복사하는것이 아닌 메모리 주소정도만 복사하는 방식입니다.

얕은 복사를 사용하게 되면 복제로 인해 증가하는 메모리는 없지만, 같은 인스턴스를 바라보게 되기 때문에 변경이 일어날 때 해당 객체를 참조하는 모든 인스턴스들이 같이 변경이 일어납니다.

깊은 복사는 주로 값 타입을 복사할 때 사용되는 방식입니다. 얕은 복사와는 다르게 해당 인스턴스의 모든 부분을 복제하여 독립적인 인스턴스로 만들어줍니다.

깊은 복사를 사용하면 새로운 인스턴스가 생기는것과 동일하기에 메모리 사용량이 증가하지만 독립적인 인스턴스기 때문에 변경으로부터 자유롭습니다.

이 때 값타입의 경우 COW가 구현되어있다면 부분적으로 얕은 복사를 하며, 변경이 일어날 때 깊은 복사를 진행합니다.

🏷️ 키워드

복제, 참조 타입, 값 타입, 메모리, 변경, COW

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants