본문 바로가기

개인공부/C#

[C#] 중첩 클래스(Nested Class), 분할 클래스(Partial Class)


■ 중첩 클래스(Nesteed Class) :

 클래스 내부에 정의하는 클래스로 정의 방법에 따라서 클래스의 그룹화가 가능하고 접근 한정자(Access Modifier)를 사용하여 클래스 사용 범위를 내부로만 제한하여 관리할 수 있습니다.

 

 - 클래스의 논리적인 그룹화 가능

 - 클래스 내부로 사용범위를 제한하여 코드 관리 편의 제공

 - 클래스 외부로 불피요한 내용 제한

 - 클래스의 일부처럼 표현 가능

 

 

■ Example

class OuterClass
{
    public int _num;
    private int _private_num;

    public void SetPrivateNum(int num)
    {
        this._private_num = num;
    }

    public class NestedClass
    {
        OuterClass _outer;
        public NestedClass() { }
        public NestedClass(OuterClass outer)
        {
            this._outer = outer;
        }
        public void Show()
        {
            Console.WriteLine($"[NestedClass] : OuterClass._num = {this._outer._num}");
            Console.WriteLine($"[NestedClass] : OuterClass._private_num = {this._outer._private_num}");
            // OuterClass의 private 멤버에 접근 가능
        }
    }

}
class Program
{
    static void Main(string[] args)
    {
        OuterClass outer = new OuterClass();
        outer._num = 100;
        outer.SetPrivateNum(200);

        OuterClass.NestedClass nested = new OuterClass.NestedClass(outer);
        nested.Show();
    }
}

 

Example 결과

 

 

■ 분할 클래스(Partial Class) :

 프로젝트의 규모가 커지면 소스코드 길이가 길어지기 때문에 가독성도 떨어지고 관리하기도 힘들어집니다. 분할 클래스(Partial Class)를 사용하면 같은 클래스를 여러개로 나누어 구현할 수 있어서 관리하기 편리합니다.

 

 - 같은 클래스를 나누어서 구현

 - 소스코드 관리 편의 제공

 - partial 키워드 사용

 

■ Example

 - MyClass01.cs

using System;

namespace PartialClassExample
{
    partial class MyClass   // 클래스 명은 일치해야합니다.
    {
        public void TestMethod01()
        {
            Console.WriteLine($"[TestMethod01] MyClass01.cs에 구현되어 있습니다.");
        }

        public void TestMethod02()
        {
            Console.WriteLine($"[TestMethod02] MyClass01.cs에 구현되어 있습니다.");
        }
    }
}

 

- MyClass02.cs

using System;

namespace PartialClassExample
{
    partial class MyClass   // 클래스 명은 일치해야합니다.
    {
        public void TestMethod03()
        {
            Console.WriteLine($"[TestMethod03] MyClass02.cs에 구현되어 있습니다.");
        }

        public void TestMethod04()
        {
            Console.WriteLine($"[TestMethod04] MyClass02.cs에 구현되어 있습니다.");
        }
    }
}

 

 - Program.cs

namespace PartialClassExample
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass();
            myClass.TestMethod01();
            myClass.TestMethod02();
            myClass.TestMethod03();
            myClass.TestMethod04();
        }
    }
}

 

Example 결과

 

'개인공부 > C#' 카테고리의 다른 글

[C#] 구조체(Struct), 튜플(Tuple)  (0) 2022.09.14
[C#] IS, AS  (0) 2022.09.10
[C#] 상속(Inheritance)  (0) 2022.09.07
[C#] 접근 제한자(Access Modifier)  (0) 2022.09.06
[C#] 정적(Static) 클래스, 필드, 메서드  (0) 2022.09.05