Unity

멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 54일차

나른한여우 2025. 8. 4. 17:25

C# 중급

 

🧱 1. Sealed

sealed class MyClass {}
 
  • sealed는 상속 금지 키워드
  • 이 클래스를 상속해서 다른 클래스를 만들 수 없음
  • Unity에서 MonoBehaviour를 상속한 클래스를 상속하지 못하게 막을 때 유용

🧩 2. Delegate와 Event

✅ Delegate란?

메서드를 변수처럼 저장하고 실행할 수 있는 타입 (함수 포인터 느낌)

delegate void MyDelegate(string msg);

MyDelegate del = ShowMsg;
del("안녕!");

✅ Event란?

Delegate를 외부에서 Invoke 못 하게 감싸는 키워드

public event MyDelegate onJump;

onJump += Jump;
onJump?.Invoke();  // 외부에서는 Invoke 불가
항목DelegateEvent
호출 가능 O
+= 가능 O O
-= 가능 O O
보호 수준 약함 강함
 

🎮 3. UnityEvent

public UnityEvent onClick;
onClick?.Invoke();
  • Unity의 에디터 연동이 가능한 이벤트 클래스
  • UnityAction 타입의 함수를 AddListener()로 연결
  • 직렬화 가능 → Inspector에서 함수 드래그 앤 드롭 연결 가능

🔁 4. EventHandler

event EventHandler SomethingHappened;

SomethingHappened?.Invoke(this, EventArgs.Empty);
  • .NET 표준 이벤트 패턴
  • sender와 event 정보를 함께 넘김
  • Unity보다 WinForm, WPF 등에서 많이 사용됨

🧠 5. 익명 함수와 Lambda

Action sayHi = () => Debug.Log("Hi");
sayHi();

Func<int, int> square = x => x * x;
  • 익명 함수 (delegate() {})의 축약형
  • 간결한 콜백이나 조건 검사에 최적화
  • delegate 없이도 사용 가능하지만 내부적으로는 delegate임

🔍 6. Func와 Predicate

✅ Func

 
Func<int, int> square = x => x * x;
  • T → TResult 구조
  • 결과를 반환하는 메서드 저장용

✅ Predicate

Predicate<int> isEven = x => x % 2 == 0;
  • T → bool 구조
  • 조건 검사용 delegate
타입목적시그니처
Func<T, TResult> 연산, 계산 int → int
Predicate<T> 조건 판별 int → bool
 

⚙️ 7. Action

Action log = () => Debug.Log("로그!");
Action<int> logValue = x => Debug.Log(x);
  • void 반환형 delegate
  • 리턴값 없는 콜백 처리에 최적
  • UnityAction과 유사하지만, UnityEvent와 연결 시에는 UnityAction 사용

🔗 전체 관계도 요약

 
             [ delegate ]
                     ↓
   [ Action ]           [ Func / Predicate ]
         ↓                              ↓
[ UnityAction ]       [ EventHandler ]
         ↓
[ UnityEvent ]

✅ 마무리 요약표

항목매개변수반환설명
delegate 자유 자유 기본 함수 참조
event delegate 기반 - 캡슐화된 이벤트
UnityEvent UnityAction void Inspector 연결 가능
Action<T> T void 리턴 없는 실행
Func<T, TResult> T TResult 리턴 있는 함수
Predicate<T> T bool 조건 검사 전용