본문 바로가기

c#

C# 문법 Action Func Predicate delegate 차이점

c#에서는 여러 종류의 델리게이트가 있습니다.

delegate는 메서드를 매개변수로 전달하거나, 이벤트와 연결하거나, 코드 블록을 생성하는 데 사용할 수 있습니다.

마찬가지로 Action Func Predicate도 델리게이트의 종류이며 각각의 차이점이 있습니다.

 

1.Action

Action은 메서드의 return값이 없는 void 형식일 때 해당 메서드를 지정하여 사용이 가능하며 파라미터를 지정하지 않아도 사용이 가능한 점 이 특징입니다.

    // Action = void
            Action printAction = ActionMethod;
            printAction();
              
        public void ActionMethod() 
        {
           Console.WirteLine("매개변수 없어도 됨");
        }

 

2.Func

Func는 매개변수와 리턴 값이 있는 메서드를 델리게이트로 참조할때 사용 가능한 기능입니다.  <>의 맨 뒤에는 리턴 타입이 지정되며 그앞에 선언되는 타입은 매개변수의 타입으로 지정 됩니다.

  //앞은 매개변수 형식 정의, 맨 마지막은 반환 형식 정의 
            Func<string,string> printFunc = FuncMethod;            
            Console.WriteLine(printFunc("func").ToString());
            
            
        public string FuncMethod(string msg)
        {
            return msg+"는 반환 형식이 있음";
        }

 

3.Predicate

Predicate는 Func와 마찬가지로 리턴타입과 매개변수가있으나 매개변수로는 한개만 지정 할 수 있으며 무조건 bool타입으로 만 return되어야 합니다. Func에서도 bool타입 리턴을 사용 할 수 있으나 bool타입에 관한 리턴은 Predicate를 사용하는것이 가독성 측면에서 더 이점이 있습니다.

        //bool형 리턴 매개변수 인수는 하나여야 함
            Predicate<int> printPredicate = PredicateMethod;
            Console.WrtieLine(printPredicate(10).ToString());
            
        public bool PredicateMethod(int count)
        {
            if (count > 1)            
                return true;            
            else 
                return false;
        }