728x90
반응형
1. 익명 형식(Anonymous Type)
C#에는 이름 없는 형식이 존재하는데, 이 것을 익명 형식이라고 합니다.
익명 형식을 사용하면 명시적으로 형식을 정의할 필요 없이 읽기 전용 속성 집합을 단일 개체로 편리하게 캡슐화할 수 있습니다.
사용 방법 : 익명 형식 |
var 익명-형식-이름 = new { 속성-1 = 값-1, 속성-2 = 값-2 ... } |
using UnityEngine;
public class AnonymousTypeExample : MonoBehaviour
{
void Start()
{
var t = new { name = "Coderzero", age = 47 };
Debug.LogFormat($"{t.name} {t.age}");
}
}
2. 익명 메서드(Anonymous Method)
모든 메서드는 이름을 가집니다.
하지만, C#은 대리자에서 사용하기 위해서 이름이 없는 무명 메서드가 지원합니다.
사용 방법 : 익명 메서드 |
delegate 데이터-형식 대리자-이름 (매개 변수) ... 대리자-이름 변수-이름 = delegate (매개 변수) { return ... ; } |
using UnityEngine;
public class AnonymousMethodExample : MonoBehaviour
{
delegate int MyDelegate(int a, int b);
void Start()
{
MyDelegate sum;
sum = delegate (int a, int b)
{
return a + b;
};
}
}
3. 람다식(Lambda Expression)
람다식은 무명 메소드처럼 사용되는 무명 함수입니다.
C# 3.0 부터 => 연사자를 이용하여 람다식을 만들 수 있습니다.
사용 방법 : 람다식 |
(입력-매개-변수) ==> { 실행-문장 } |
람다식은 대리자로 정의 후 사용합니다.
using UnityEngine;
public class LambdaExpressionExample : MonoBehaviour
{
delegate int Calculate(int a, int b);
void Start()
{
Calculate calculate = (a, b) => a + b;
Debug.LogFormat($"{1} + {2} = {calculate(1, 2)}"); // 출력 : 1 + 2 = 3
}
}
4. Func 대리자, Action 대리자
앞의 무명 메소드를 사용하기 위해서는 대리자를 선언해야 하는데, C#에서는 Func 대리자와 Action 대리자를 이용하여 참고만 하며 사용 할 수 있습니다.
Func 대리자와 Action 대리자의 차이는 Func 대리자는 반환형식이 있지만, Action 대리자는 반환형식이 없습니다.
네임스페이스 |
using System; |
사용 방법 : Func 대리자 |
Func<매개변수-1 데이터-형식, 매개변수-2 데이터-형식, ...반환-데이터-형식> // 제일 마지막이 반환값의 데이터 타입이고, 매개변수 데이터 형식은 0개도 가능함 Func<float> func1() = () => 0.1f; // 매개변수는 없고, 반환값은 float 형임 Func<int, float> func2() = (a) => a* 0.1f; // int 형 매개변수는 1개가 있고, 반환값은 float 형임 Func<int, int, float> func3() = (a, b) => a* b; // int 형 매개변수는 2개가 있고, 반환값은 float 형임 |
사용 방법 : Action 대리자 |
Action<매개변수-1 데이터-형식, 매개변수-2 데이터-형식...> // 매개변수 데이터 형식만 사용 Action action1() = () => Debug.Log("Action") // 매개변수는 없음 Action<int> action2() = (a) => a* 0.1f; // int 형 매개변수는 1개임 Action<int, int> action3() = (a, b) => a* b; // int 형 매개변수는 2개가 있임 |
using UnityEngine;
using System;
public class FuncActionExample : MonoBehaviour
{
void Start()
{
Func<int> func1 = () => 1;
Debug.LogFormat($"{func1()}"); // 출력 : 1
Func<int, int> func2 = (a) => a * 2;
Debug.LogFormat($"{func2(3)}"); // 출력 : 6
Action action1 = () => Debug.Log("Action"); // 출력 : Action
action1();
Action<int, int> action2 = (a, b) => Debug.LogFormat($"{a} {b}"); // 출력 : 1 2
action2(1, 2);
}
}
728x90
반응형
'프로그램 > 유니티 C# 강좌' 카테고리의 다른 글
[유니티 C# 강좌] 20. 병렬 프로그래밍 (Parallel Programming) (0) | 2020.02.09 |
---|---|
[유니티 C# 강좌] 19. 비동기 프로그래밍(Asynchronous Programming) (0) | 2020.02.06 |
[유니티 C# 강좌] 17. 이벤트(Event), 대리자 (델리게이트, Delegate) (0) | 2020.02.04 |
[유니티 C# 강좌] 16. 전처리기 지시어(Preprocessor Directive) (0) | 2020.01.30 |
[유니티 C# 강좌] 15. 제네릭 (Generics) (0) | 2020.01.29 |