no image
[Unity, C#] Boxing과 Unboxing에 대하여
목차 1. Boxing과 Unboxing의 개요 2. Boxing과 Unboxing이 성능에 미치는 영향에 관하여 요약 박싱은 값 타입을 참조 타입으로 변환하는 작업을 의미하고, 언박싱은 참조 타입의 값을 값 타입으로 변환하는 작업을 의미합니다. 값 타입의 변수가 저장되는 위치는 stack메모리에 위치하고, 참조 타입은 heap 메모리에 위치합니다. 박싱이 발생할 때 힙에 공간을 할당해서(box) stack에 있는 값을 복사해 넣습니다. 그리고 stack 메모리에서는 값이 저장되어있는 객체를 가리키는 힙 메모리의 주소를 저장하게 됩니다. 사용 예시코드 int i = 123; // a value type object o = i; // boxing (박싱발생, 암묵적 형변환 가능.) int j = (int)..
2021.08.08
no image
[Unity, C#] 중첩 클래스(Nested Class)
중첩 형식 - C# 프로그래밍 가이드 클래스, 구조체 또는 인터페이스 내에서 정의된 형식을 C#에서 중첩 형식이라고 합니다. docs.microsoft.com 중첩 클래스의 사용이유 1. 현재의 클래스의 일부분처럼 표현할 수 있는 클래스를 만들고자 할 때 2. 클래스 외부에 공개하고 싶지 않은 형식을 만들고자 할 때 위 특징을 보면 이해가 되겠지만, 저런 특징들 때문에 접근 한정자의 디폴트가 private입니다. 뒤에 사용법 설명에서 확인할 수 있습니다. 중첩 클래스 사용법 중첩 클래스란 클래스, 구조체, 인터페이스 내에서 또 class가 선언된 것을 의미합니다. // 1번 코드 public class Container { class Nested { Nested() { } } } 예제코드를 보면, 위 처..
2021.05.02
[Unity, C#] 배열의 default 초기화
배열 - C# 프로그래밍 가이드 C#의 배열 데이터 구조에 형식이 동일한 변수를 여러 개 저장합니다. 형식을 지정해 배열을 선언하거나 개체를 지정해 모든 형식을 저장합니다. docs.microsoft.com 배열을 선언했을 때(static, 전역이 아닐 때) C언어처럼 생각하여 배열에 쓰레기 값이 들어가있을 것이라 착각하여 찾아본 레퍼런스입니다. 배열 개요 배열에는 다음과 같은 속성이 있습니다. 배열은 단일 차원, 다차원 또는 가변일 수 있습니다. 차원 수와 각 차원의 길이는 배열 인스턴스를 만들 때 설정됩니다. 이러한 값은 인스턴스의 수명 동안 변경할 수 없습니다. 숫자 배열 요소의 기본값은 0으로 설정되고, 참조 요소는 null로 설정됩니다. 가변 배열은 여러 배열로 구성되어 있기 때문에 해당 요소가..
2021.04.30
[Unity, C#] 다른 c#파일의 class 호출
다른 C#파일의 Class 호출 C#은 C, C++처럼 다른 곳의 소스코드를 들고올 때 #include와 같은 것을 사용안해도 호출이 가능합니다. 모두 동일한 네임스페이스에 있는 한 모두 마법처럼 서로를 찾을 수 있습니다. 그래서 C#에는 #include문이 존재하지 않습니다. C#은 다른 파일에 있는 클래스를 참조하는 경우 파일이 프로젝트에 포함되어 있고 동일한 네임 스페이스에 있으면 아무것도 수행할 필요없이 참조할 수 있습니다. 다른 네임스페이스에 있는 Class호출의 경우 호출하고 싶은 C#파일의 Class가 다른 파일에 있다면 이런 경우에는 한 가지 작업만 해주면 똑같이 사용할 수 있습니다. 예를들어, Call.cs 파일의 A class를 호출하고 싶은데 A class가 NamespaceStudy..
2021.04.18
다중상속
추상 클래스를 만들어 사용해서 다중상속 하는데 안됨. docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-messages/cs1721 컴파일러 오류 CS1721 컴파일러 오류 CS1721 docs.microsoft.com ‘class’ 클래스는 여러 개의 기본 클래스(‘class_1’ 및 ‘class_2’)를 가질 수 없습니다. 이 오류 메시지가 표시되는 가장 일반적인 원인은 다중 상속을 사용하려고 시도하기 때문입니다. C#에서 하나의 클래스는 하나의 클래스에서만 직접 상속할 수 있습니다. 그러나 하나의 클래스는 원하는 수만큼의 인터페이스를 구현할 수 있습니다. 이렇게 해결하라네.
2021.01.31