다음을 통해 공유


메서드 추출

업데이트: 2007년 11월

메서드 추출은 기존 멤버의 코드 조각으로부터 새 메서드를 간편하게 만드는 방법을 제공하는 리팩터링 작업입니다. 자세한 내용은 리팩터링을 참조하십시오.

메서드 추출을 사용하면 기존 멤버의 코드 블록에서 선택된 코드를 추출하여 새 메서드를 만들 수 있습니다. 새로 추출된 메서드에는 선택된 코드가 포함되고, 기존 멤버의 선택된 코드는 새 메서드에 대한 호출로 바뀝니다. 코드 조각을 별도의 자체 메서드로 변환하면 코드를 빠르게 정확하게 다시 구성하여 재사용률과 가독성을 높일 수 있습니다.

메서드 추출을 사용하면 다음과 같은 이점이 있습니다.

  • 다시 사용할 수 있는 별도의 메서드를 중요시하여 좋은 코딩 습관을 갖게 합니다.

  • 좋은 구성을 통해 자체적으로 설명하는 코드를 작성할 수 있습니다.

    서술적 이름을 사용하면 일련의 주석을 읽는 것처럼 메서드의 가독성을 높일 수 있습니다.

  • 더욱 세분화된 메서드를 만들어 재정의를 단순화할 수 있습니다.

  • 코드 중복을 줄입니다.

설명

메서드 추출 명령을 사용하면 새 메서드는 같은 클래스의 소스 멤버 뒤에 삽입됩니다.

부분 형식(Partial type)

클래스가 부분 형식인 경우 메서드 추출을 사용하면 소스 멤버 바로 뒤에 새 메서드가 생성됩니다. 메서드 추출에서 새 메서드의 시그니처를 결정하며, 새 메서드의 코드에서 어떠한 인스턴스 데이터도 참조하지 않는 경우 static 메서드를 만듭니다.

제네릭 형식 매개 변수

제약이 없는 제네릭 형식 매개 변수를 사용하는 메서드를 추출할 때는 해당 매개 변수에 값이 할당되지 않는 한 생성되는 코드에서 매개 변수에 ref 한정자가 추가되지 않습니다. 추출된 메서드가 참조 형식을 제네릭 형식 인수로 지원할 경우 메서드 시그니처의 매개 변수에 수동으로 ref 한정자를 추가해야 합니다.

익명 메서드

익명 메서드 외부에서 선언되거나 참조되는 지역 변수에 대한 참조를 포함하는 익명 메서드의 일부를 추출하면 의미 체계가 변경될 수 있다는 경고 메시지가 표시됩니다.

익명 메서드가 지역 변수의 값을 사용하면 이 값은 익명 메서드가 실행되는 순간에 가져옵니다. 익명 메서드가 다른 메서드에서 추출되는 경우 지역 변수의 값은 추출된 메서드를 호출하는 순간 가져옵니다.

다음 예제에서는 이러한 의미 변화를 보여 줍니다. 이 코드가 실행될 경우 11이 콘솔에 인쇄됩니다. 메서드 추출을 사용하여 코드 주석으로 표시된 코드 영역을 자체 메서드로 추출한 다음 리팩터링된 코드를 실행하면 콘솔에 10이 출력됩니다.

class Program
{
    delegate void D();
    D d;
    static void Main(string[] args)
    {
        Program p = new Program();
        int i = 10;
        /*begin extraction*/
            p.d = delegate { Console.WriteLine(i++); };
        /*end extraction*/
        i++;
        p.d();
    }
}

이 문제를 피하려면 익명 메서드에서 사용되는 지역 변수를 클래스의 필드로 만듭니다.

참고 항목

작업

방법: 메서드 추출을 사용하여 코드 리팩터링