무명 메소드

    델리게이트를 통해 여러 개의 함수를 한 번에 실행할 수 있는데 만약 델리게이트 안에서만 사용하면 되는 함수가 필요하다면 무명 메소드를 쓰면 된다.

    // 두 변수를 더한 뒤 초기화해주는 클래스와 함수를 만들었다고 하자.
    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# 인터페이스, 형식 매개 변수 T 클릭!

    C# 프로퍼티 속성, 인덱서 클릭!

    C# 클래스 상속 클릭!

    C# 구조체 델리게이트 클릭!

    C# 컬렉션 리스트, 큐, 스택, 해시테이블, 딕셔너리, arraylist 클릭!

     

    C# 배열 선언, 사용법 클릭!

    C# 조건문, 반복문 클릭!

    C# 연산자, ++ 사용법 클릭!

    C# 전역변수, 지역변수, 접근 지정자 클릭!

    C# 함수 정의와 호출 클릭!

     

    C# 기본 자료형 클릭!

    C# print, 주석, 변수 클릭!

    '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