Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 7.0 로컬 함수(Local Function)란? 개념과 예제로 쉽게 이해하기

C# 7.0에서 새롭게 도입된 로컬 함수(Local Function)는 다른 멤버 내부에 중첩되어 선언되는 private 메서드입니다. 로컬 함수는 자신을 둘러싼 포함 멤버(containing member) 내부에서만 호출할 수 있으며, 외부에서는 접근할 수 없습니다.

로컬 함수를 선언하고 호출할 수 있는 위치

로컬 함수는 아래와 같은 다양한 멤버 안에서 선언하고 호출할 수 있습니다.

  • 메서드 — 특히 반복기(iterator) 메서드와 비동기(async) 메서드에서 유용하게 활용됩니다
  • 생성자(Constructor)
  • 속성 접근자(Property Accessor)
  • 이벤트 접근자(Event Accessor)
  • 익명 메서드(Anonymous Method)
  • 람다 식(Lambda Expression)
  • 종료자(Finalizer)
  • 다른 로컬 함수 내부

로컬 함수를 사용하면 특정 멤버에서만 사용하는 보조 로직을 해당 멤버 바로 안에 캡슐화할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.

예제 1: 기본적인 로컬 함수

class Program{
    public static void Main(){
        void addTwoNumbers(int a, int b){
            System.Console.WriteLine(a + b);
        }
        addTwoNumbers(1, 2);
        Console.ReadLine();
    }
}

출력 결과

3

위 예제에서 addTwoNumbersMain 메서드 내부에 선언된 로컬 함수입니다. 이 함수는 오직 Main 안에서만 호출할 수 있습니다.

예제 2: out 매개변수를 사용하는 로컬 함수

class Program{
    public static void Main(){
        void addTwoNumbers(int a, int b, out int c){
            c = a + b;
        }
        addTwoNumbers(1, 2, out int c);
        System.Console.WriteLine(c);
        Console.ReadLine();
    }
}

출력 결과

3

두 번째 예제처럼 로컬 함수도 일반 메서드와 마찬가지로 out, ref 같은 매개변수 한정자를 사용할 수 있습니다. 호출 시에는 C# 7.0의 인라인 변수 선언 기능을 활용해 out int c 형태로 간결하게 작성했습니다.

마무리

로컬 함수는 별도의 private 메서드를 클래스 수준에 만들 필요 없이, 필요한 곳 바로 옆에 보조 로직을 정의할 수 있게 해주는 강력한 기능입니다. 특히 유효성 검사나 반복되는 계산 로직을 반복기·비동기 메서드 내부에 배치할 때 코드 구조를 훨씬 깔끔하게 유지할 수 있습니다.