확장 메소드

00·2024년 12월 16일

C#

목록 보기
16/149

확장 메소드: '기존 클래스'의 기능을 확장 ( =/+상속 )
상속(기반 클래스를 물려 받아 파생 클래스를 만든 뒤 파생 클래스에 필드나 메소드 추가)과 다름

using System;
using MyExtension; // 확장 메소드를 담는 클래스의 네임스페이스를 사용함.


/*
 확장 메소드: '기존 클래스'의 기능을 확장 != 상속
 상속(기반 클래스를 물려 받아 파생 클래스를 만든 뒤 파생 클래스에 필드나 메소드 추가)과 다름
 */


namespace MyExtension // using에 사용함.
{
    public static class IntegerExtension // 기존 클래스를 static 한정자로 수식
    {
        public static int Square(this int myInt) // 확장 메소드
                                                 // 메소드를 static 한정자로 수식
                                                 // 첫 번째 매개변수는 반드시 this 키워드와 함께 확장하려는 클래스(or 형식)의 인스턴스여야 함.

        {
            return myInt * myInt;
        }

        public static int Power(this int myInt, int exponent) // 확장 메소드 Power()
                                                              // 첫 번째 매개변수에 this 키워드를 사용하여 int 형식에 대한 확장 메서드임을 나타냅니다.
                                                              // 메소드를 static 한정자로 수식
                                                              // 첫 번째 매개변수는 반드시 this 키워드와 함께 확장하려는 클래스(or 형식)의 인스턴스여야 함.
                                                              // , 뒤에가 확장 메소드를 호출할 때 입력되는 매개변수임.(여기서는 exponent)

        {
            int result = myInt;
            for (int i = 1; i < exponent; i++)
                result = result * myInt;

            return result;
        }
    }
}

namespace ExtensionMethod
{
    class MainApp
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"{3}^2 : {3.Square()}"); // 9
            Console.WriteLine($"{3}^{4} : {3.Power(4)}"); // 3.Power(4) >> Power()가 원래부터 int 형식의 메소드였던 것처럼 사용함.
                                                          // int 형식의 값 3에서 Power() 메서드를 호출하기 위해 사용.
                                                          // Power() 메서드는 IntegerExtension 클래스에 정의된 확장 메서드이므로,
                                                          // int 형식의 값에서 마치 int 클래스의 메서드처럼 호출할 수 있습니다.

            // Power(4)에서 괄호 안에 4를 넣은 것은 int 형식의 값을 인자로 전달한 것입니다.
            // Power() 메서드는 IntegerExtension 클래스에서 int 형식의 확장 메서드로 정의되어 있고,
            // 두 번째 매개변수로 int exponent를 받습니다.따라서 Power(4)와 같이 호출하면
            // 4라는 int 값이 exponent 매개변수에 전달됩니다.

            Console.WriteLine($"{2}^{10} : {2.Power(10)}"); // 1024
        }
    }
}


// Power() 메서드는 원래 int 형식의 메서드가 아니었지만, 확장 메서드를 통해 int 형식에서 사용할 수 있게 된 것.
// 확장 메서드는 기존 클래스에 새로운 메서드를 추가하는 것처럼 보이게 하는 기능입니다.
// 실제로는 별도의 static 클래스에 정의된 static 메서드이지만, 마치 원래 클래스의 메서드처럼 사용할 수 있습니다.

0개의 댓글