C# - Class vs Struct구조적 차이점“값 복사 비용이 크면 struct 대신 class로 바꾸면 되지 않나?”“in 키워드로 참조 전달이면 struct도 사실상 class 아닌가?” C#에서는 Class와 Struct가 겉보기엔 비슷하게 보이지만, 그 내부 동작과 철학은 완전히 다르다.일반적으로는 값 전달 방식의 차이와 복사값의 차이(class는 얕은 복사(주소), struct는 깊은 복사(값) 발생)가 있다. in struct는 단순한 최적화가 아니라, “값형의 의미를 보존하면서 복사를 회피” 하는 언어적 장치이다. 이 차이를 이해하면 성능과 설계 안정성 모두를 잡을 수 있다. 항목 Class Struct 저장 위치힙(Heap)스택(Stack) 또는 인라인전달 방식참조 전달값 전달(복사)G..
C# 읽기 전용 참조 전달 (in 키워드) in 키워드 C#에서 값 형식(struct, int, float 등)을 메서드 인자로 전달할 때는 기본적으로 값 복사(by value) 가 일어난다. 이는 작은 구조체라면 상관없지만, 구조체의 크기가 커질수록 복사 비용이 눈에 띄게 커진다. in 키워드는 이러한 복사 비용을 줄이면서도 읽기 전용으로 참조를 전달할 수 있게 해준다. 즉, “성능 + 안전성” 두 가지를 동시에 잡는 키워드입니다. void Process(in LargeStruct data) { // data를 복사하지 않고 참조로 읽음 Console.WriteLine(data.Value); // data.Value = 100; ❌ 컴파일 에러 (읽기 전용)} 전달 방식 비교값 전달 ..
박싱과 언박싱 (Boxing & Unboxing) 박싱과 언박싱은 메모리 영역을 공부하면 알게되는 기법으로 값 형식의 데이터를 참조 형식으로 변환하는 과정을 박싱, 그 반대를 언박싱이라 한다. 박싱 (Boxing) 이해하기 쉽게 말하면, C#은 모든 객체의 최상단에 object가 있다. 즉, 모든 자료형은 object로 변환될 수 있다. 이러한 상황에서 int형 변수를 object로 바꾸어 보면 박싱이 되는 것이다. 박싱 (Boxing) int value = 42; // 값 타입 변수를 선언하고 초기화 object boxedValue = value; // 값 타입을 참조 타입으로 박싱하여 저장 주의할 점은 단순히 스택에서 힙으로 값을 복사하는 것이 박싱이 아니다. 클래스 객체를 new로 만들어 힙영역에 ..
개요유니티 프로젝트를 진행하며 코드 작성 중 궁금한 점을 발견했다.스크립트 _SCRIPT = null; // 스크립트 변수 선언if(_SCRIPT == null && (_SCRIPT = gameObject.GetComponent()) == null){ _SCRIPT = gameObject.AddComponent();}if문을 통해 스크립트 변수가 연결되어있는 스크립트가있는지 확인 (변수가 Null인가)스크립트 변수가 할당되어 있지 않다면 현재 오브젝트에 해당 스크립트 호출해당 스크립트가 현재 오브젝트에 존재하지 않는다면 새로운 컨포넌트로 스크립트 입력 후 변수와 연결 즉, 2번과 a는 하나의 if문에 구성되지만 if문은 둘을 모두 확인하고 결과를 넘어가는 것인지 첫번째 조건이 불충족시 바로 조건문을..