무명 메소드
델리게이트를 통해 여러 개의 함수를 한 번에 실행할 수 있는데 만약 델리게이트 안에서만 사용하면 되는 함수가 필요하다면 무명 메소드를 쓰면 된다.
// 두 변수를 더한 뒤 초기화해주는 클래스와 함수를 만들었다고 하자.
public class Test : MonoBehaviour
{
int a = 5;
int b = 5;
int sum;
void Add()
{
sum = a + b;
}
void Back()
{
sum = 0;
}
// 델리게이트를 이용해 함께 호출되도록 하자
delegate void MyDelegate();
// 변수로 만들어주고
MyDelegate myDelegate;
void Start()
{
myDelegate = Add;
myDelegate += Back;
myDelegate();
}
}
이렇게 하면 델리게이트를 실행하면 더한 뒤 바로 0으로 초기화해준다.
만약 더한 뒤 프린터를 해주고 싶다면 어떻게 해야 될까?
이때 무명메소드를 이용할 수 있다.
void Start()
{
myDelegate = Add;
// 여기 무명 메소드 추가
myDelegate += delegate() { print(sum); };
myDelegate += Back;
myDelegate();
}
람다식
람다식이란 코드를 굉장히 간단하게 줄여서 쓸 수 있는 방법이다.
처음엔 어려울 수 있는데 익숙해지면 작성해야 하는 코드 양이 굉장히 줄어들어 편하다.
위 무명 메소드와 똑같은 기능을 하는 람다식을 써보자.
void Start()
{
myDelegate = Add;
myDelegate += delegate(매개변수) { print(sum); }; // 무명 메소드
myDelegate += (매개변수) -> print(sum); // 람다식
myDelegate += Back;
myDelegate();
}
람다식은 매개변수 화살표 명령어만 써넣으면 된다.
무명 메소드를 더 쉽게 쓰는 게 람다식이다.
Action 액션 Func 펑션
액션과 펑션은 델리게이트를 줄여놓은 것이다.
우선 액션과 펑션의 차이는 리턴이 없을 때는 액션을 사용하고 리턴이 있을 때는 펑션을 사용한다.
// 액션은 네임스페이스 system에 있다.
using System;
// 반환값 없는 델리게이트 예시
delegate void MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;
// Action 액션으로 작성하면 한줄로 작성이 가능하다. 선언부가 System에 정의 되있어서 안해도 된다.
Action<int, int> myDelegate2;
// 반환값 있는 델리게이트 예시
delegate string MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;
// Func 펑션으로 작성할 경우도 한줄로 작성이 가능하다.
Func<int, int, string> myDelegate3; // 처음 2개는 매개변수 타입이고 마지막은 리턴 타입이다.
오류의 예외 처리
오류가 발생하면 코드가 더 이상 진행되지 못하고 멈춰버린다.
이때 프로그램이 멈추지 않도록 하려면 예외 처리를 해주면 된다.
// 예외처리 하는 법
try
{
실행할 코드 // 여기 try 안에 적힌 코드가 오류가 날 때 예외 처리하는 것
}
catch(Exception) // Exception은 모든 오류를 다 잡는 것
{
처리할 코드;
}
catch(DivideByZeroException ie) //이렇게 계속 catch를 여러개 넣어서 오류마다 처리코드를 미리 지정할 수 있다.
{
print(ie);
처리할 코드;
}
finally // 오류가 발생하든 안하든 무조건 최종적으로 실행할 코드
{
실행할 코드;
}
// throw를 쓰면 오류를 일부러 발생시킬 수 있다.
throw new Exception("메시지");
※ 함께 읽으면 좋은 C# 기초
C# 컬렉션 리스트, 큐, 스택, 해시테이블, 딕셔너리, arraylist 클릭!
'IT > 코딩' 카테고리의 다른 글
파이썬 bs4 네이버 뉴스 크롤링 오류 해결법 (1) | 2021.12.29 |
---|---|
C# 코루틴, 전처리 (0) | 2021.12.19 |
C# 인터페이스, 형식 매개 변수 T (0) | 2021.12.17 |
C# 프로퍼티 속성, 인덱서 (0) | 2021.12.16 |
C# 클래스 상속 (0) | 2021.12.15 |