구조체와 클래스는 복사에서 차이가 나타난다.
구조체는 원본 구조체를 복사할 경우 깊은 복사가 되며,
클래스는 얕은 복사로 같은 대상을 참조하게 된다.
이처럼 구조체를 복사하면 복사된 변수의 값을 바꿔도 원본에는 아무 일도 일어나지 않는다.
왜 깊은 구조체는 깊은 복사가 디폴트로 되게 했을까?
참조형 변수는 힙에 올라가있는 객체를 가리키고 있다.
위와 같이 복사를 하면 힙 영역에 올라간 객체의 주소를 복사할 뿐이다.
힙 영역에 올라간 객체를 두 변수가 같이 바라보고 있는 것이다.
복사된 참조자를 통해 값을 바꾸면 원본 참조자를 통해 보았을 때 바뀐 객체가 보일 수 밖에 없다.
해결책은 깊은 복사를 진행하는 것.
여느 언어들 처럼 깊은 복사를 담당하는 메서드를 만들어주자.
똑같은 내용을 가진 새로운 객체를 반환해주는 Clone 메서드를 선언한다.
그리고 호출해주면 같은 내용을 가진 새로운 객체를 가지게 되고 깊은 복사가 잘 되는 것을 알 수 있다.
클래스의 깊은 복사, 얕은 복사는 C++과 다를 것이 없는 듯 하다.
잡설