Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Euler
- AR Foundation
- ARProgect
- callbyvalue
- AR게임
- 병맛게임
- github
- Unity
- 게임개발
- 1인개발
- 확장메서드
- C#
- 게임제작
- 소규모프로젝트
- 인터페이스
- 리듬게임
- 델리게이트
- AR세팅
- callbyreference
- 유니티
- 게임
- 깃허브
- ar
- raycast
- 짐벌락
- 리듬게임에디터
- ExtensionMethod
- 레이캐스트
- Quaternion
- 로케트
Archives
- Today
- Total
Ssssong += Dev
[C#] 구조체와 클래스의 값 복사 본문
헷갈리는 부분 다시 정리...
일반적으로
구조체의 복사는 값의 복사이고(깊은 복사)
클래스의 복사는 주소의 복사이다.(얕은 복사)
유니티에서 인스펙터 창에 public으로 끌어다 놓은 객체는 클래스의 복사로, 변경 시 원본의 변경이 일어난다.
public Transform tempTransform;
//이후 인스펙터 창에서 tempTransform에 오브젝트 복사해 넣음
Vector3 tempVec = new Vector3(10, 10, 10);
tempTransform.position = tempVec;
이런 식으로 사용했을 때 원본 오브젝트의 포지션이 바뀌게 된다.
그러나 int num = 10; 이렇게 선언된 변수 num은 int가 구조체이기 때문에
int num = 10;
int input = 0;
num = input;
input = 30;
이런 식으로 변경하면 num은 num = input 때에만 변경되어 0이 나오게 된다.
예외의 경우도 있는데,
string의 경우 class 타입이지만 구조체처럼 값에 의한 복사가 일어난다.
이는 C++와 형식을 맞추기 위함이다.
구조체에서 주소에 의한 복사를 실행하기 위해서는 ref, in, out을 사용한다.
+ 깊은 복사를 위한 DeepCopy() 메서드를 확장메서드로 추가해서 사용하는 방법도 있다.
public static T DeepCopy<T>(this T value) where T : class, new()
{
T clone = new T();
return clone;
}
'개발 > 공부' 카테고리의 다른 글
[유니티] Raycast (0) | 2022.05.10 |
---|---|
[유니티, C#] layerMask와 비트연산자 (0) | 2022.05.09 |
피보나치 수열, 하노이 탑, 링크드리스트, 배열형 스택 (0) | 2022.05.02 |
[C#, 유니티] Coroutine (0) | 2022.04.14 |
[C++, C#] static, property (0) | 2022.04.14 |