재밌고 어려운 IT를 이해해보자~!

확장 메소드, 분할 클래스, 중첩 클래스 본문

C#

확장 메소드, 분할 클래스, 중첩 클래스

언제나즐거운IT 2024. 7. 1. 16:59

확장 메소드 

이 확장 메소드는, 기존 클래스의 기능을 확장시켜주는 메소드라고 볼 수 있다.

 

namespace 네임스페이스명
{
    public static class 클래스명
    {
        public static 반환형식 메소드명(this 확장대상형식 식별자, 매개변수..)
        {
            ..
        }
        ..
    }
}

 

선언 형식을 보시면, 정적(static) 클래스를 먼저 정의하고 그 안에 확장 메소드가 정의되었습니다. 확장 메소드 역시 정적(static) 메소드여야 한다.

 

그리고 메소드의 첫번째 매개변수에서 this 한정자가 존재해야 한다.

 

예제

using System;
using Extension;
 
namespace Extension
{
    public static class ExtensionMethod
    {
        public static int Multiplication(this int var, int a, int b)
        {
            int result = var;
 
            for (int i = 0; i < b; i++)
                result *= a;
 
            return result;
        }
    }
}
 
namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("{0}", 5.Multiplication(2, 3));
        }
    }
}

 

마치 인스턴스 메소드처럼 5의 뒤에 .을 붙여 메소드를 호출하고 있습니다. 여기서 5는 Multiplication()의 매개변수 var에 들어가며, 2는 a에, 3은 b에 들어가게 된다.

10~15행을 살펴보면 result란 변수에 var의 값을 담아, result에 a를 b번 곱하고 이 결과값을 호출부로 반환하여, 반환된 값을 출력

 

이미 빌드된 라이브러리를 참조해서 사용하고 있는데, 이 라이브러리 내부에 있는 기존의 클래스를 좀 더 확장시키고 싶어. 그런데 나에게는 이 라이브러리의 소스 코드가 없기 때문에 클래스를 직접 수정할 수는 없을 것 같을때 유용하게 사용할 수 있다.

 

분할 클래스(Partial Class)

클래스의 구현이 길어질 경우 두 개 이상의 소스 파일로 분할하여 동시에 작업을 수행하거나, 관리의 편의를 위해 클래스를 분할하기도 한다.

 

예제

using System;
 
namespace Example
{
    partial class Nested
    {
        public void Test() { Console.WriteLine("Test()"); }
    }
    partial class Nested
    {
        public void Test2() { Console.WriteLine("Test2()"); }
    }
    partial class Nested
    {
        public void Test3() { Console.WriteLine("Test3()"); }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Nested nested = new Nested();
            nested.Test();
            nested.Test2();
            nested.Test3();
        }
    }
}

 

partial 키워드가 붙은 클래스는 컴파일 시 컴파일러에 의해 하나로 합쳐진다.

분할에는 제한이 없으며, 여러 번 분할해도 상관이 없다.

 

중첩 클래스(Nested Class)

첩 클래스는 클래스 내에 또 클래스가 정의된 클래스를 말한다.

이 중첩 클래스는 주로 외곽 클래스에서만 사용하고자 할때, 외부에 정의하는 것보다 관련있는 클래스를 내부 클래스로 두어 코드를 쉽게 이해하기 위해 사용된다.

 

class 클래스명
{
    class 클래스명
    {
        ..
    }
}

 

 

예제

using System;
 
namespace ConsoleApplication21
{
    public class OuterClass
    {
        private int a = 70;
 
        public class InnerClass
        {
            OuterClass instance;
 
            public InnerClass(OuterClass a_instance)
            {
                instance = a_instance;
            }
 
            public void AccessVariable(int num)
            {
                this.instance.a = num;
            }
 
            public void ShowVariable()
            {
                Console.WriteLine("a : {0}", this.instance.a);
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            OuterClass outer = new OuterClass();
            OuterClass.InnerClass inner = new OuterClass.InnerClass(outer);
 
            inner.ShowVariable();
            inner.AccessVariable(60);
            inner.ShowVariable();
        }
    }
}

 

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

클래스의 상속  (0) 2024.06.30
접근제한자  (0) 2024.06.30
클래스  (0) 2024.06.30
배열  (0) 2024.06.30
메소드  (0) 2024.06.29
Comments