■ 중첩 클래스(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();
}
}
■ 분할 클래스(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();
}
}
}
'개인공부 > 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 |