반응형

**극꼼이네 GGTales** 307

[C#] 확장 메서드 기법

: 기존의 클래스에 손대지 않고 메서드를 추가하는 방법입니다. * 확장 메서드 사용 조건 확장 메서드를 정의할 클래스를 static으로 선언. 정의한 클래스 내부에 확장하고 싶은 메서드를 static으로 선언. 첫번째 파라미터로 메서드가 포함되어질 클래스를 this 포인터와 함께 적어줌. * 확장 메서드 사용 예시 public static class LongExtensions { public static string ToPrice(this long value) { return value.ToString("N0"); } } long a = 13343454323243; string price = a.ToPrice(); Console.WriteLine((price)); //13,343,454,323,243 출력

[Unity]/[C#] 2022.09.29

[C#] 메서드 매개 변수 : params, in, ref, out

* params : 가변 개수의 인수. * in : 매개 변수를 참조로 전달할 수 있지만, 호출된 메서드로만 읽을 수 있습니다. static void InArgExample(in int number) { number = 19; //오류 출력 -> 수정 불가능. } * ref : 인수가 값이 아닌 참조로 전달됨을 의미합니다. void Method(ref int refArgument) { refArgument = refArgument + 44; } int number = 1; Method(ref number); Console.WriteLine(number); //45 출력 -> 값타입인 int도 참조로 전달 * out : 매개 변수가 참조로 전달되고, 호출된 메서드에 의해 새로 기록되도록 해줍니다. 메서드가..

[Unity]/[C#] 2022.09.28

[C#] Tuple(튜플) 형식

: 간단한 데이터 구조로, 여러 데이터 요소를 그룹화하여 간결한 구문으로 제공합니다. 여러 값을 함께 리턴해야 할 때 유용합니다. 타입이 없는 튜플은 지역변수에 넣을 수 없습니다. var invalid = (10, null); → 유효하지 않음. 애리티(arity)가 동일하고, 그에 대응하는 요소의 타입이 암시적으로 변환 가능할 경우 튜플 리터럴을 튜플 타입으로 암시적 변환할 수 있습니다. 튜플 리터럴 : 각 요소는 값을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (5, title: ”text”) 튜플 타입 : 각 요소가 타입을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (int x, string) //튜플 변수를 선언하고 초기화 (double, int) t1 = (4.5, 3); Cons..

[Unity]/[C#] 2022.09.27

[C#] Action과 Func

: 메서드를 매개변수로 전달하는 기법. delegate에는 action, func, predicate 대리자가 있으며, 이번 포스팅에서는 action과 func의 사용 예시만 다뤄보려 합니다. * 이전 delegate vs event 포스팅 : https://geukggom.tistory.com/210 [C#] delegate와 event의 차이 1. delegate 2. event 3. delegate와 event의 차이점 1. delegate : delegate는 하나의 형식(type)으로, 메서드에 대한 참조입니다. delegate는 인스턴스 메서드, 정적메서드 모두 참조 가능합니다. delegate는.. geukggom.tistory.com * 둘 다 입력 매개 변수의 개수가 0~16개까지 가능...

[Unity]/[C#] 2022.09.26

[Unity] AsyncOperation

: 비동기적인 연산을 위한 코루틴을 제공합니다. 유니티의 LoadScene 메서드를 호출했을 때, 유니티는 해당 장면의 모든 정보를 메모리로 가져오기 전까지 다른 작업을 하지 못합니다. 이 상황이 게임이 멈춰있는 상황으로 이어질 수 있기 때문에 유니티에서는 AsyncOperation을 제공합니다. 사용 예시를 간단하게 보여드리겠습니다. using UnityEngine.SceneManagement; AsyncOperation asyncOper = SceneManager.LoadSceneAsync("SceneName"); //장면이 준비되는 즉시 장면을 활성화시킬 것인지 허용 여부 asyncOper.allowSceneActivation = false; while(!asyncOper.isDone) //해당 동..

[Unity]/[Unity] 2022.09.23

[Unity] 유니티용 비동기 라이브러리 패키지 Unitask

: 유니티용 async-await 통합 비동기 라이브러리 패키지. C#의 async-await를 유니티에 맞게 최적화하여 기본 Task보다 가볍고, 기존 C#의 Task/ValueTask/IValueTaskSource와 호환성이 뛰어납니다. * 예시 코드 private UniTask WaitTouch() { _touchButton.gameObject.SetActive(true); return _touchButton.OnClickAsync(); } try-catch로 예의처리 가능합니다. 콜백 없이 작성하는 경우, 코드가 선형적으로 순서대로 실행되기 때문에 규칙성 있고 깔끔합니다. struct base : heap에 할당되지 않으므로 zero allocation. 유니티 메인 쓰레드(Player Loop)..

[Unity]/[Unity] 2022.09.22

[C#] 비동기 메서드(async, await)

: async 키워드를 사용하며, 매개 변수에 out, ref같은 한정자는 사용할 수 없습니다.(일부 비동기 메서드는 호출 측으로 반환되지 않아서 참조를 통한 매개변수 전달을 허용하지 않음) static void Main(string[] args) { Task task = DemoCompletedAsync(); // -> 비동기 메서드 호출 Console.WriteLine("Method return"); task.Wait(); // -> 작업이 완료될 때까지 중단 Console.WriteLine("Task completed"); } static async Task DemoCompletedAsync() { Console.WriteLine("first await start : "); await Task.Fr..

[Unity]/[C#] 2022.09.21

[C#] ConditionalAttribute

: C# 컴파일러가 해석하는 전처리 지시문입니다. ConditionalAttribute의 별칭이고, 메서드 또는 특성 클래스에 적용합니다. void 메서드에만 적용 가능하고, 일부 문장에 대해서만 제약할 수는 없고 해당 메서드 전체에 적용됩니다. #if ~ #endif 로 감싸는 것보다 코드가 깔끔하고, 더 분명하고 정교해서 오류 가능성이 적어집니다. //사용 예시 [Conditional("RELEASE"), Conditional("DEBUG")] void method() { } * RELEASE : 출시 모드일 때 메서드 사용. * DEBUG : 디버그 빌드의 추적 및 로깅 기능을 사용하도록 설정. 이외의 추가적인 키워드는 ProjectSettings - Player - Other Settings - ..

[Unity]/[C#] 2022.09.20

[C#] MethodImpl (feat.인라인 함수)

: 메서드의 구현 방법을 자세히 지정해줍니다. using System.Runtime.CompilerServices; [MethodImpl(MethodImplOptions.AggressiveInlining)] void method() { } AggressiveInlining : 가능하면 인라인. NoInlining : 컴파일러가 런터임에 인라인되지 않도록 적용. Synchronized : 동기화. 한번에 한 쓰레드에서만. 그 외의 키워드는 아래 링크를 참고하시길 바랍니다. https://docs.microsoft.com/ko-kr/dotnet/api/system.runtime.compilerservices.methodimploptions?view=net-6.0 : 함수 코드가 호출자에게 롤링되는 컴파일러 ..

[Unity]/[C#] 2022.09.19

[C#] internal 액세스 한정자

internal 액세스 한정자 : 구성 요소 그룹이 나머지 코드에 노출되지 않고 비공개 방식으로 상호 작용합니다. 구성 요소 기반 개발에 사용되고, 프레임 워크를 사용하는 코드에 노출되지 않습니다. public class의 경우 누구나 해당 dll 클래스를 상속받아 별도의 변형된 2차 래퍼클래스로 작성 가능하기 때문에 그런 경우를 방지하기 위해 internal로 작성하고, 어셈블리 내부에서 자유롭게 사용하기 위한 용도로 많이 쓰입니다. 주로 프레임워크, 공통 컨트롤 개발자, 서드파티 컴포넌트 등에서 사용합니다. 예제 internal class BaseClass { public static int intM = 0; } class TestAccess { static void Main() { //interna..

[Unity]/[C#] 2022.09.18
반응형