C#

[C#]지역 함수(Local Function)

DevStory 2022. 5. 29.

지역 함수(Local Function)

C#의 지역 함수는 함수의 본문 내부에 존재하는 함수입니다. 함수를 사용할 수 있는 범위가 상위 함수 본문으로 제한되므로 지역 함수라고 하며, C# 7.0에 도입된 기능입니다.

 

특정 함수 본문 내부에 정의된 함수를 지역 함수, 하위 함수라고 말하며, 특정 함수는 상위 함수라고 말합니다.


지역 함수 특징

  • 지역 함수는 종료자(finalizers), 람다 표현식(lambda expressions), 생성자(constructors) 등에서 호출할 수 있습니다.
  • 지역 함수는 기본적으로 private이므로 접근 한정자 및 static 키워드를 사용할 수 없습니다.
  • main() 함수 또는 상위 함수에서 지역 함수 정의 후 여러 번 호출할 수 있습니다.
  • 지역 함수는 오버로드(Override)할 수 없습니다.
  • 지역 함수는 상위 함수의 변수를 접근할 수 있습니다.

지역 함수 예제

다음은 지역 함수를 사용하는 예제입니다. Main() 함수 내부에서 지역 함수 PrintValue(), Add(), Minus()라는 내부 함수를 정의하였습니다.

class Program
{
  static void Main(string[] args)
  {
    int addvalue = Add(10, 20);
    int minusValue = Minus(100, 50);
    
    PrintValue("Hello");
    Console.WriteLine("addvalue: " + addvalue);
    Console.WriteLine("minusValue: " + minusValue);

    void PrintValue(string value)
    {
      Console.WriteLine("value: " + value);
    }

    int Add(int x, int y)
    {
      return x + y;
    }

    int Minus(int x, int y)
    {
      return x - y;
    }
  }
}

실행 결과

value: Hello
addvalue: 30
minusValue: 50

변수 addValue와 minusValue의 값을 Add()와 Minus() 함수로 초기화하였습니다. 위 예제에서 볼 수 있듯이 지역 함수는 호출 후 나중에 정의할 수 있습니다.

 

다음은 지역 함수에서 상위 함수의 변수를 접근하는 예제입니다. 지역 함수 Add()와 Minus()에서 상위 함수의 변수 value의 값을 콘솔 창에 출력합니다.

class Program
{
  static void Main(string[] args)
  {
    string value = "Hello";

    int addvalue = Add(10, 20);
    int minusValue = Minus(100, 50);

    int Add(int x, int y)
    {
      Console.WriteLine("Main() 함수의 value: " + value);
      return x + y;
    }

    int Minus(int x, int y)
    {
      Console.WriteLine("Main() 함수의 value: " + value);
      return x - y;
    }
  }
}

실행 결과

Main() 함수의 value: Hello
Main() 함수의 value: Hello

정리

  • 함수 본문에 정의된 함수를 지역 함수라고 말합니다.
  • 상위 함수에서 특정 기능을 여러 번 사용한다면, 지역 함수로 구현할 수 있습니다.
  • 재귀 함수를 지역 함수로 구현할 수 있습니다.
반응형

'C#' 카테고리의 다른 글

[C#]잠금 및 Lock 키워드  (0) 2022.06.05
[C#]스레드 동기화(Thread Synchronization)  (0) 2022.06.05
[C#]멀티스레드(MultiThread)  (0) 2022.05.28
[C#]Thread 생성자(Thread Constructor)  (0) 2022.05.28
[C#]캡슐화(Encapsulation)  (0) 2022.05.25

댓글