• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • C# 프로그래밍의 기초: Action과 Func
    2024년 08월 10일
    • 유니얼
    • 작성자
    • 2024.08.10.:42
    728x90

    C#의 Action과 Func는 대리자(delegate)를 사용하는 강력하고 유연한 방식을 제공합니다. 이 두 가지는 특히 람다 표현식과 함께 사용할 때 코드를 간결하고 명확하게 만들어 주며, 개발자가 보다 함수적인 접근 방식을 취할 수 있도록 도와줍니다. 이 블로그 글에서는 Action과 Func의 기본적인 개념, 차이점, 그리고 사용 예제를 제공하고자 합니다.

    Action

    Action 대리자는 반환 값이 없는 메서드를 캡슐화합니다. 다시 말해, Action은 void를 반환하는 메서드에 사용됩니다. Action은 최대 16개의 매개변수를 받을 수 있습니다. 매개변수가 없는 경우부터 시작하여, Action<T1, T2, ..., T16>까지 다양한 형태를 지원합니다.

    기본 사용 예:

    Action greet = () => Console.WriteLine("Hello, World!");
    greet();

    매개변수가 있는 사용 예:

    Action<string, string> printNames = (firstName, lastName) => 
        Console.WriteLine($"First name: {firstName}, Last name: {lastName}");

    Func

    반면, Func 대리자는 반환 값이 있는 메서드를 캡슐화합니다. Func의 마지막 제네릭 타입은 항상 메서드의 반환 타입을 나타냅니다. Func 역시 최대 16개의 매개변수까지 지원하고, Func<TResult>부터 Func<T1, T2, ..., T16, TResult>까지 다양한 조합을 가질 수 있습니다.

    기본 사용 예:

    Func<int, int, int> add = (x, y) => x + y;
    int result = add(5, 3);
    Console.WriteLine(result);  // 출력: 8

    매개변수가 여러 개인 사용 예:

    Func<double, double, double, double> volume = (x, y, z) => x * y * z;
    double boxVolume = volume(3.0, 4.5, 5.0);
    Console.WriteLine(boxVolume);  // 출력: 67.5

    차이점

    주된 차이점은 Action이 반환 값을 갖지 않는다는 것이고, Func는 반드시 반환 값을 요구한다는 점입니다. 이는 두 대리자를 사용하는 상황에 영향을 미칩니다. 예를 들어, 어떤 작업을 수행만 하고 결과를 반환할 필요가 없는 경우 Action을 사용하며, 계산이 필요하고 그 결과를 반환해야 할 때는 Func을 사용합니다.

    전체코드

    using System;
    
    namespace DelegatesExample
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Action 예제
                Action greet = () => Console.WriteLine("Hello, World!");
                greet();
    
                Action<string, string> printNames = (firstName, lastName) => 
                    Console.WriteLine($"First name: {firstName}, Last name: {lastName}");
                printNames("Jane", "Doe");
    
                // Func 예제
                Func<int, int, int> add = (x, y) => x + y;
                int result = add(5, 3);
                Console.WriteLine("Addition Result: " + result);
    
                Func<double, double, double, double> volume = (x, y, z) => x * y * z;
                double boxVolume = volume(3.0, 4.5, 5.0);
                Console.WriteLine("Volume of the box: " + boxVolume);
    
                // 조건을 처리하는 Func 예제
                Func<int, string> checkNumber = number =>
                {
                    if (number % 2 == 0)
                        return "Even";
                    else
                        return "Odd";
                };
    
                string numberType = checkNumber(7);
                Console.WriteLine("Number 7 is: " + numberType);
    
                // 결과를 반환하지 않는 복잡한 Action 예제
                Action<int, int> printSum = (a, b) =>
                {
                    int sum = a + b;
                    Console.WriteLine($"Sum of {a} and {b} is {sum}");
                };
                printSum(10, 15);
            }
        }
    }

    결론

    Action과 Func은 C#에서 함수적 프로그래밍 요소를 간편하게 사용할 수 있게 해주며, 코드의 가독성과 유지 관리를 크게 향상시킵니다. 이들 대리자의 적절한 사용은 프로그램의 유연성을 높이고, 다양한 프로그래밍 상황에 맞춰 코드를 더 간결하고 효과적으로 작성할 수 있도록 도와줍니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바