Copy는 Rust의 소유권 모델에서 중요한 트레잇중 하나다



이 트레잇의 가장 중요한 역할은 구현한 타입을 대입할때 `이동`대신 `복사`를 하게 만드는데 이 둘의 차이점은 소유권을 `양도` 하느냐 `복제` 하느냐의 차이다




위에선 ori와 new가 각각 소유권을 갖지만 밑에선 new만이 소유권을 가지고 있어서 ori는 더이상 접근할수 없다




다만 이렇게 항상 복사된다는 점 때문에 문제가 되기도 한다


대표적으로 Range를 포함한 반복자 타입들이 있는데 암시적으로 복사되는것이 직관적이지 않을때가 있어서 얘들은 Clone은 구현해도 Copy를 구현하지는 않는다


(관련 댓글 https://github.com/rust-lang/rust/pull/27186#issuecomment-123390413)




이외에도 인스턴스가 여러개 있으면 안된다거나 하면 Copy는 물론이고 Clone도 구현하지 않게 된다




그리고 Copy를 구현하는 타입들은 의미가 충돌하는 Drop을 구현할수 없게 되고 복제를 단순히 바이트 복사로 할수있게 되기에


이를 이용해서 일부 함수들은 특별한 최적화를 하기도 한다



https://doc.rust-lang.org/std/primitive.slice.html#method.clone_from_slice



https://doc.rust-lang.org/std/primitive.slice.html#method.copy_from_slice