일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- Custom Package
- 패스트캠퍼스후기
- Framework
- base64
- 패스트캠퍼스
- AES
- Unity Editor
- Tween
- 암호화
- unity
- adfit
- DotsTween
- C#
- 직장인자기계발
- 최적화
- Job 시스템
- 커스텀 패키지
- 직장인공부
- 2D Camera
- RSA
- 가이드
- 샘플
- TextMeshPro
- 프레임워크
- ui
- sha
- 환급챌린지
- job
- Dots
- 오공완
- Today
- Total
목록C# (14)
EveryDay.DevUp
주요 변경 사항- Generic / ?? (널병합 연산자) / default 예약어 / yield return, break / partial / 값 형식? Nullable / Anonymous method / static class Generic- C# 1.0에서 기본 타입으로 컬랙션 객체를 생성할 경우 박싱/언박싱 문제가 발생: ArrayList 형식으로 구현되었기 때문에 int object로 박싱/언박싱이 발생: 박싱 -> 스택 메모리에 값이 힙메모리에 복사되는 것 // 언박싱 -> 힙 메모리에 값이 스택메모리에 복사 되는 것- Generic을 사용할 경우 CLR은 JIT 컴파일 시에 타입에 따라 확장된 기계어 코드를 생성- 클래스와 메서드에 사용할 수 있음- 제네릭을 사용함으로써 박싱/언박싱의 문..

1. var란? - C# 3.0에서 지역 변수를 선언할 때 컴파일러가 빌드 시점에 타입을 추론할 수 있도록 사용하는 키워드 : 명시적으로 변수의 타입을 정의하지 않아도 var 키워드를 사용해서 해당 변수의 타입을 지정할 수 있음 : 초기화 문의 오른쪽에 있는 식에서 변수의 형식을 유추 var count = 0; Debug.Log("count type : " + count.GetType()); // count type : System.Int32 var result = false; Debug.Log("result type : " + result.GetType()); // result type : System.Boolean 2. var 제한 사항 : 지역 변수가 동일한 문에서 선언 및 초기화 된 경우에만 va..

* 단축 평가 - 조건식에서 논리 연산자를 사용할 때, 단축 평가가 되는 경우가 있음 var x = 1; var y = 2; // x > 1 이 false 임으로, 뒤의 y 1 && y = 1 이 true 임으로, 뒤의 y = 1 || y Freachable 큐에 보내짐 3) 별도의 스레드에서 Freachable 큐에 있는 객체의 소멸자를 호출 4) 소멸자가 호출된 객체는 GC에 의해 관리되는 힙에서 해제 됨 - 관리되지 않는 자원을 사용했을 때, 소멸자를 사용 : IDisposable 을 추가해서, Dispose을 개발자가 명시적으로 호출할 수 있도록함 : Dispose를 호출하지 않은 경우를 위해, 소멸자를 정의 : Dispose에서 GC.SuppressFinalize 를 호출해서 Finalizati..

* 특성 - Attribute 클래스는 미리 정의된 시스템 정보 또는 사용자가 정의한 정보를 대상 요소와 결합하여 메타데이터에 저장 - 메타 데이터에 저장된 정보를 런타임에서 참조하여 특별한 기능을 수행할 수 있음 - 모든 특성 형식은 Attribute 클래스에서 직간접적으로 파생됨 https://docs.microsoft.com/ko-kr/dotnet/api/system.attribute?view=netstandard-2.0 Attribute 클래스 (System) 사용자 지정 특성에 대한 기본 클래스를 나타냅니다. docs.microsoft.com - AttributeUsageAttribute는 다른 특성 클래스의 사용상의 제한 조건을 걸 수 있는 특성 클래스 - AttributeUsageAttrib..

Unity에서 빌드를 통해 나온 dll 파일을 디컴파일로 확인하면, 코드에서 확인할 수 없는 이슈를 확인할 수 있는 경우가 많다. foreach의 가비지 원인을 확인한다거나, sturct 를 interface로 가져올 때 박싱이 일어나는 이슈 등 동작원리를 좀 더 깊게 확인하기 위해 .DLL을 디컴파일해서 IL을 확인할 수 있다. .Net 디컴파일을 위해서 개인적으로 사용하는 툴은 JetBrains에 DotPeek을 사용한다. 아래의 주소에서 다운로드가 가능하고, 기능을 확인할 수 있다. https://www.jetbrains.com/ko-kr/decompiler/download/#section=web-installer 다운로드 dotPeek: JetBrains가 만든 무료 .NET 디컴파일러 www.j..

매개 변수의 전달 1. 값 형식 매개 변수 - 값 형식의 매개 변수를 전달 할 경우 값 형식의 복사본이 만들어져 메서드에 전달되게 됨 public class ValueTypeSample { public int value = 0; public void AddValue( int value ) { value++; Debug.Log(" AddValue : " + value); } } public class MethodParameter : MonoBehaviour { private void Start() { ValueTypeSample valueTypeSample = new ValueTypeSample(); // 현재 value 값은 0 Debug.Log("value 1 : " + valueTypeSample.v..

액세스 한정자는 멤버 또는 형식의 선언된 접근성을 지정하는데 사용되는 키워드 키워드 접근성 public 제한 없음 protected 포함 및 파생 internal 동일 어셈블리로 제한 protected internal 동일 어셈블리 또는 다른 어셈블리여도 포함하는 클래스에서 파생된 형식 private 포함 private protected 포함 or 동일 어셈블리 내의 포함하는 클래스의 파생 ( C# 7.2 이상 ) * 네임 스페이스에는 액세스 한정자가 허용되지 않음 public class A { } // 동일 어셈블리에서는 internal만 사용할 경우 public과 접근 제어 수준이 동일함 internal class B { } // protected, protected internal, private,..

Unity의 https://docs.unity3d.com/kr/2021.1/Manual/CSharpCompiler.html 문서에 정의된 버전별 C# 컴파일러의 지원 버전을 정리하였다. C# 버전에 따라 기능의 제한이 있기 때문에 서비스 시 Unity 버전에 따른 지원 버전을 확인해야 한다. 근래 Unity는 C# 8.0을 사용하기 때문에 해당 버전을 기준으로 프로그램을 작성하면 된다. ( Unity에서 C#의 모든 기능을 제공하진 않기 때문에 서포트하지 않는 기능에 대해서는 문서를 통해 확인이 필요함 ) Unity 버전 Scripting Runtime Version 컴파일러 C# 버전 2021.2 Roslyn 9.0 2020.2 - 2021.1 .NET 4.6 Equivalent Roslyn 8.0 2..

Struct (구조체)? - 데이터와 관련 기능을 캡슐화할 수 있는 값 형식 캡슐화 : 데이터와 기능을 하나로 묶고, 구현 내용 일부를 외부에 감춤 특징 1. 매개 변수가 없는 생성자를 선언할 수 없음 ( 단, C# 10부터 생성할 수 있게 됨 ). 해당 형식의 기본 값을 생성하는 매개 변수 없는 암시적 생성자를 제공하고 있음 기본 값 : struct (구조체)의 기본 값은 모든 값 형식 필드를 각 형식의 기본 값으로, 참조 필드를 null로 설정함 1) 매개 변수 없는 암시적 생성자를 제공하기 때문에 new struct()를 사용할 수 있음 2) 매개 변수 없는 명시적 생성자를 생성하려고할 경우 에러 발생 public struct A { // 구조체는 매개 변수 없는 명시적 생성자를 추가할 수 없기 때..

● namespace 란? : 클래스 또는 메서드, 변수의 범위를 정의해서 사용할 수 있는 것으로 대규모 프로젝트에서 개발자가 여러명일 경우 또는 외부에 공유되는 모듈 형태의 코드에서 사용된다. : namespace를 정의한 코드 영역과 namespace 밖의 코드 영역은 분리되기 때문에 같은 변수 이름에 같은 메소드 이름을 사용할 수 도 있다. 같은 이름이지만 namespace에 의해 구분할 수 있기 때문에 사용이 가능하다. namespace AAA { public class TestA { } } namespace BBB { public class TestA { AAA.TestCode.TestA testA; /// AAA.TestA TestA testa; /// BBB.TestA } } : using ..