얕은 복사
- 객체를 복사할 때 참조만 복사하는 것을 얕은 복사라고 한다.
얕은 복사의 경우 이전 객체의 참조만 복사하기 때문에 힙에서 같은 주소를 가리키게 되고,
이전 객체의 값이 변경되면 복사한 객체의 값도 같이 변경된다.
깊은 복사
- 객체를 복사할 때 새로운 힙 공간을 할당해 주는 것을 깊은 복사라고 한다.
복사된 객체가 같은 주소를 가리키지 않고, 힙에서 새로운 공간을 할당받기 때문에 개별적인 객체로 존재하고, 복사된 객체의 값이 변경되더라도 영향을 받지 않는다.
> 참고블로그
어려웠던 이유
- 플레이어가 여러명 존재하고 상점은 하나뿐인데 만약 상점에서 구매를 하면 인벤토리에 저장될 때 다른 플레이어의 인벤토리에도 변경된 값이 들어가는 불상사가 벌어졌다.
- 튜터님께 여쭤보러 가는길에 매니저님들께 납치를 당해서 3:1 강의를 들었는데 유익했다. 바보같을지 모르지만 Add로 추가했는데도 이게 값으로 복사가 되는게 아니라 참조로 복사가 되는지 몰랐다.
물론 이 방식으로 해결해보려 하다가 Json연결 하면서 다른 방법으로 바꿨지만 진짜 유용했던 정보였다.
매니저님 감사합니다....
내가 질문했던 내용은 이렇다.
Q. 플레이어별 인벤토리 구현시 상점의 변경이 생길때 모든 플레이어 인벤토리에도 적용이 되는데
원본 상점 자체를 복사해서 사용해야하는지?
A. 현재 상점의 아이템을 구매할때 인벤토리에 참조 형식으로 추가가 되기때문에
깊은 복사로 인스턴스를 하나 더 추가하는 형식으로 수정을 하면될 것 같다.
+ 깊은 복사로 인스턴스를 하나 더 생성해서 인벤토리에 넣어준다고 표현하는 것이 더 정확합니다.
추가로, 두번째 사진에 들어가있는 new는 복사 생성자입니다!
내가 답변 받은 내용을 올릴때 조금 내 식으로 올려서 다시 피드백을 주셨다. 그래서 내 글도 고쳤다. 감사합니당...헿
근데 그래도 어렵습니다.....
오늘의 회고
분명 할 일은 다 끝났는데 왜이렇ㄱ ㅔ 마음의 짐이 무거운건지....................
인벤토리하는데 진짜 하루종일 했어요....
의외로 다 박살냈음...
원래 아이템이랑만 연결되어있던거 플레이어 클레스에도 인벤토리 리스트 만들어서 플레이어 이름을 기본키 삼아서 불러오기 하는형식으로 바꿨는데 이거하는데 진짜 나머지하는거 다 합쳐도 이것보단...... 아닐듯........
끼악............
'Record > TIL' 카테고리의 다른 글
[Unity] Input.GetAxis (ps.WASD상하좌우 기본 컨트롤하기) (4) | 2024.05.08 |
---|---|
[Unity] 팀프로젝트 던전 마무리 (2) | 2024.05.07 |
[Unity] ref 매개변수 한정자 (2) | 2024.05.02 |
[Unity] SelectToken/SelectTokens ? (4) | 2024.05.01 |
[Unity] Json 직렬화, 역직렬화 (0) | 2024.04.30 |