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

Copy On Write란 무엇인가요? #32

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

Copy On Write란 무엇인가요? #32

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

Comments

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 12, 2025

No description provided.

@youn9k
Copy link
Collaborator

youn9k commented Jan 14, 2025

Cow(Copy On Write) 는 Swift Collection(Array, Set, Dictionary)와 String 타입에서 복사가 일어날 때 바로 깊은 복사가 일어나는 것이 아니라, 다른 변수에 복사되는 시점엔 얕은 복사로 동작하고 복사된 값에 변경이 생길 때 깊은 복사를 통해 완전히 다른 인스턴스로 구분하여 메모리를 효율적으로 사용하기 위한 방식을 말합니다.

@0Hooni
Copy link
Collaborator Author

0Hooni commented Jan 14, 2025

🙋🏻 답변

COW는 값 타입이 복제될 때 메모리에 쌓이는 문제를 해결하기 위해 실제 사용할때까지 복사를 지연시키는 방법입니다.

예를 들어 1, 2, 3이 들어 있는 배열을 COW가 없는 상황에서 복사할 때 동일한 데이터의 인스턴스가 두개가 되어 메모리에 두배의 영역을 차지합니다.

하지만 COW를 사용한다면 바로 복사를 하지 않고 참조만 하고 있다가, 해당 인스턴스에 변경이 생기면 그 때 복사를 진행해서 메모리에 추가됩니다.

COW를 사용하게 되면 메모리를 좀 더 효율적을 관리할 수 있게 됩니다.

🏷️ 키워드

복사, 지연복사, 참조, 변경, 메모리효율

@Kiyoung-Kim-57
Copy link
Collaborator

Copy on Write는 값 타입 중 컬렉션 타입에서 데이터의 복사 비용을 줄이기 위해 사용하는 최적화 방식입니다.

처음에 배열 하나를 복사하면 참조를 복사하여 두 변수가 같은 메모리를 공유합니다. (얕은 복사)
하지만 그 중에 하나를 수정하게 되면 그 때 새로 데이터를 복사하여 독립적인 메모리를 할당합니다. (깊은 복사)

이는 값 타입의 장점을 유지하면서 불필요한 복사를 피할 수 있는 최적화 방법입니다.

@hsw1920
Copy link
Owner

hsw1920 commented Jan 16, 2025

이름 그대로 Write가 발생했을 때 Copy를 수행한다는 의미입니다.
값 타입 데이터는 값을 참조하지 않고 복사하지만, 매번 복사를 하는 경우 값이 변경될 필요가 없음에도 매번 새로운 메모리 공간을 할당하여 복사가 이뤄진다면 메모리가 낭비되는 문제가 발생합니다.
때문에 값 타입 데이터는 COW를 통해 메모리 활용을 최적화합니다.

COW를 통해 값 타입 데이터를 복사 시 실제 값을 복사하는 것이 아닌 동일한 값을 참조하며, 해당 값이 변경(Write)될 때 값을 복사를 수행하여 독립적인 메모리 공간을 할당합니다.

Swift의 경우 Heap 메모리를 사용하는 Collection Type의 Array, Set, Dictionary와 일부 String 타입의 경우 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