[Rust] 이동과 복사
러스트에서 값의 대입은 기본적으로 [이동]을 수행한다.
예시를 들어보겠다.

x좌표와 y좌표를 가지는 Point 타입을 만들고, 생성하고, 출력했다.
아무런 문제가 없는 코드다.
그렇다면 p1을 다른 변수에 대입한다면 어떨까?

이동된 값을 썼다고 뭐라한다.
p1이 완전히 p2로 넘어가고 p1이 비어버린 상황이 벌어진 것이다.
이게 굉장히 효율적인 시스템이긴 하지만, 복사의 비용이 아주 저렴해서 굳이 이동이 필요없을 경우에는 불편함만을 유발할 수도 있다.
이걸 해결하려면 Copy와 Clone 트레잇을 구현해주면 되는데. 여기에는 두가지 방법이 있다.

손으로 trait을 구현해줘도 되고

#derive 속성으로 처리해줄수도 있다.
값이 복제된다는 것을 명시하려면 clone을 쓰면 좋다.


기본타입 등의 가벼운 타입들은 거의 이 두가지를 구현하고 있다.


아 그리고 Copy는 Clone 트레잇에 의존적이다.
Copy만 두고, Clone을 안두면 복사가 수행되지 않는다