복사를 허용하지 않는 객체 : Non-Copyable!

정다소·2025년 1월 22일

참조 타입이 값타입처럼 행동하고 싶다. → Deep copying이 일어남 : 변경이 일어나도 동일한 참조가 아니기 때문에 서로 영향을 받지 않음(copy on write의 기본)

제어 가능 : 깊이 복사할지 정하는 것

제어 불가 : swift가 자동 복사본을 만들 수 있는지 여부

struct(type) , generic , protocol, box protocol(any)

→ Swift의 대부분이 자동을 Copyable protocol을 준수

은행 이체 취소 예제

이체가 안됐을 때 객체를 취소 해야하는데 이를 deinit에 넣어도 실행이 안됨. (다른 어딘가에서 복사되 메모리를 차지하고 있기 때문에.)

보통 값을 복사 가능하게 함 : Copyable

값이 복사되면 안됨 : non-copyable (은행 이체와 같이 중복되면 안되는 객체를 관리하는 경우)

~Copyable로 호출.

소유권의 3가지 종류 : consume, borrowing, inout

Copy를 시도하면 자동으로 consume(소유권 이전)

아래 예제에서 system을 consume이후 호출하면 에러!

format과 같이 임시 변수로 필요하다면? borrowing : 임시 읽기 접근 권한. 호출권을 이전하지 않고 임시로 빌림. 하지만 값을 변경시키거나 소비할 수 없다.

inout : 임시 쓰기 접근 권한.

NON-copyable generic

~Copyable을 준수한다해서 copyable이 안되는 것은 아님. (COPYABLE이 아닐수 있음을 의미하기 때문에 ~ 는 범위를 넓힘)

extension을 copyable과 ~copyable인 것으로 나눠서 실행 설정하고 실행가능.

https://developer.apple.com/videos/play/wwdc2024/10170/

WWDC:Consume noncopyable types in Swift 영상의 내용을 정리했습니다.

profile
슬기로운 코딩 생활

0개의 댓글